2012-10-25 10 views
5

पर आधारित एक पांडा डेटाफ्रेम कॉलम मान बदलें मेरे पास दो स्तंभों वाला डेटाफ्रेम है जिसमें से प्रत्येक जीव को दर्शाता है। उन्हें ORG1 और ORG2 कहा जाता है, मैं इसी सूचकांक मान के लिए ORG2 के मानों को ORG1 में स्थानांतरित करना चाहता हूं।किसी अन्य कॉलम मान

तो, यदि ORG1 'ए' है और ORG2 'बी' है, तो मैं ORG1 को ORG2 से मान 'बी' लेना चाहता हूं।

मैं पहले से ही, ORG2 जीवों कि मैं ले जाना चाहते हैं की पहचान करने के लिए अनुक्रमित काम शुरू कर दिया है इस प्रकार है:

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 

क्या सबसे अच्छा तरीका है इस का उपयोग करने के लिए इसी ORG2 पर मूल्यों के साथ ORG1 मूल्यों को बदलने के लिए है सूचकांक

उत्तर

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

धन्यवाद @ Wouter-overmeire, बहुत संक्षिप्त। – John

1

दूसरे शब्दों में, .loc का उपयोग कर आप क्या करेंगे

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 

या, आप एक प्रति, जरूरत है मूल df को संशोधित किए बिना, आप उपयोग कर सकते हैं .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