2016-09-29 49 views
2

我想用另一列的值填充一列中的缺失值。蟒蛇 - 大熊貓 - FillNa與另一個非null行有相似的列

我看過循環遍歷每一行將是非常糟糕的做法,並且最好一次性完成所有操作,但我無法找到如何使用fillna方法執行此操作。

數據之前

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

數據後

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

回答

1

您可以使用fillna並通過DF沒有NaN行,該指數設定爲Cat2,然後調用map將執行查找:

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 

所以在這裏我把NaN行,該指數設定爲Cat2,通過這種調用map它會查找CAT1 values where Cat2`匹配

這裏是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