2012-10-25 21 views
5

Her biri bir organizmayı temsil eden iki sütun içeren bir veri çerçevem ​​var. ORG1 ve ORG2 olarak adlandırılırlar. ORG2 değerlerini karşılık gelen indeks değeri için ORG1'e taşımak istiyorum.Başka bir sütun değerine dayalı bir pandalar DataFrame sütun değerini değiştirin

Yani, ORG1 'A' ve ORG2 'B' ise ORG1'in ORG2'den 'B' değerini almasını isterim. aşağıdaki gibi

Zaten, ben taşımak istediğiniz ORG2 organizmaların endeksleri belirlemek için çalışmalara başladılar:

def move_org2(x): 
    org2_matches = Series(x.ORG2.str.count("ESBL")) 
    return x.ix[org2_matches == 1] 

org2_DF = move_org2(DF) 

org2_DF.ORG2.index 

Ne ORG2 gelen en değerlerle ORG1 değerlerini değiştirmek için bu kullanmak en iyi yoldur .loc kullanarak endeksler

başka deyişle

cevap

14
In [13]: df 
Out[13]: 
    ORG1 ORG2 
0 A ESBL 
1 B  P 
2 C  Q 
3 D  R 
4 E ESBL 

In [14]: cond = df.ORG2 == 'ESBL' 

In [15]: df.ORG1[cond] = df.ORG2[cond] 

In [16]: df 
Out[16]: 
    ORG1 ORG2 
0 ESBL ESBL 
1  B  P 
2  C  Q 
3  D  R 
4 ESBL ESBL 
+0

Teşekkür kullanabilirsiniz. – John

1

, sen yapardın

In [2008]: df 
Out[2008]: 
    ORG1 ORG2 
0 A ESBL 
1 B  P 
2 C  Q 
3 D  R 
4 E ESBL 

In [2009]: df.loc[df['ORG2'] == 'ESBL', 'ORG1'] = df['ORG2'] 

In [2010]: df 
Out[2010]: 
    ORG1 ORG2 
0 ESBL ESBL 
1  B  P 
2  C  Q 
3  D  R 
4 ESBL ESBL 
Orijinal df değiştirmeden bir kopyasını, gerekirse 0

Ya da, wouter-overmeire, çok özlü @.mask()

In [2016]: df.mask(df['ORG2'] == 'ESBL', df['ORG2'], axis=0) 
Out[2016]: 
    ORG1 ORG2 
0 ESBL ESBL 
1  B  P 
2  C  Q 
3  D  R 
4 ESBL ESBL 
İlgili konular