2012-10-25 18 views
5

Ich habe ein Datenframe mit zwei Spalten, von denen jede einen Organismus darstellt. Sie heißen ORG1 und ORG2. Ich möchte die Werte von ORG2 in ORG1 für den entsprechenden Indexwert verschieben.Ändern Sie einen Pandas DataFrame-Spaltenwert basierend auf einem anderen Spaltenwert

Wenn also ORG1 "A" und ORG2 "B" ist, möchte ich, dass ORG1 den Wert "B" von ORG2 übernimmt.

Ich habe bereits begonnen Arbeit Indizes der ORG2 Organismen zu identifizieren, die ich verschieben möchten, wie folgt:

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 

Was ist der beste Weg, dies zu verwenden ORG1 Werte mit den Werten an entsprechenden ORG2 zu ändern Indizes

Antwort

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

Thanks @ wouter-Overmeire, sehr prägnante verwenden. – John

1

mit anderen Worten, .loc Verwendung würden Sie

tun
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 

Oder, wenn Sie eine Kopie benötigen, ohne original df zu ändern, können Sie .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 
Verwandte Themen