2017-10-10 2 views
0

Sagen wir, ich habe einen Datenrahmen, die wie folgt aussieht:Wenn Spalte A Wert in dict Schlüssel, Spalte B zu dict Wert in Pandas Datenrahmen gesetzt

df=pd.DataFrame({'a':['A','A','B','C'],'b':[1,2,3,4]}) 
    a b 
0 A 1 
1 A 2 
2 B 3 
3 C 4 

und ein Wörterbuch, das wie folgt aussieht:

convert={'A':9,'C':8} 

Wenn Spalte a einen Wert in convert 's Schlüssel hat, dann sollte die entsprechende Zeile für die Spalte b auf den Diktatwert geändert werden. Auf diese Weise die Ausgabe so aussehen:

a b 
0 A 9 
1 A 9 
2 B 3 
3 C 8 

ich etwas entlang der Linien von nachdachte (funktioniert nicht):

pd.np.where(df['a'].isin(convert),convert[df['a']],df['b']) 

Antwort

2

Sie map mit fillna verwenden können; df.a.map(convert) Karten Werte in Spalte ein zu entsprechenden Werte in der dict wenn Schlüssel sonst NaN vorhanden ist, dann fillna(df.b) verwenden, um Werte mit Werten aus zu füllen Spalte fehlt b:

df['b'] = df.a.map(convert).fillna(df.b) 

df 
# a  b 
#0 A 9.0 
#1 A 9.0 
#2 B 3.0 
#3 C 8.0 
Verwandte Themen