2016-09-29 4 views
2

Ich möchte fehlenden Wert in einer Spalte mit dem Wert einer anderen Spalte füllen.Python - Pandas - FillNa mit einer anderen Nicht-Null-Zeile mit ähnlicher Spalte

Ich habe gelesen, dass das Durchlaufen jeder Zeile sehr schlecht wäre und dass es besser wäre, alles auf einmal zu machen, aber ich konnte nicht herausfinden, wie man es mit der Fillna-Methode macht.

Daten vor

Day Cat1 Cat2 
1 cat ant 
2 dog elephant 
3 cat giraf 
4 NaN ant 

Daten nach

Day Cat1 Cat2 
1 cat ant 
2 dog elephant 
3 cat giraf 
4 cat ant 

Antwort

1

Sie fillna verwenden können und die df ohne NaN Reihen übergeben, um den Index zu Cat2 Einstellung und dann map Aufruf, die eine Suche durchführen wird:

In [108]: 
df['Cat1'] = df['Cat1'].fillna(df['Cat2'].map(df.dropna().set_index('Cat2')['Cat1'])) 
df 

Out[108]: 
    Day Cat1  Cat2 
0 1 cat  ant 
1 2 dog elephant 
2 3 cat  giraf 
3 4 cat  ant 

hier also lasse ich die NaN Reihen, und legen Sie den Index Cat2, von map auf diese nannte es Cat1 Nachschlag wird values where Cat2` Spiele

Hier ist das Ergebnis der map:

In [112]: 
df['Cat2'].map(df.dropna().set_index('Cat2')['Cat1']) 

Out[112]: 
0 cat 
1 dog 
2 cat 
3 cat 
Name: Cat2, dtype: object 
Verwandte Themen