python - Pandas - FillNa与另一个具有相似列的非null行

时间:2016-09-29 14:44:20

标签: python pandas numpy jupyter-notebook

我想用另一列的值填充一列中的缺失值。

我读到循环遍历每一行将是非常糟糕的做法,并且最好一次性完成所有事情,但我无法找到如何使用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 个答案:

答案 0 :(得分:1)

您可以使用fillna并传递不带NaN行的df,将索引设置为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