python - Pandas - FillNa 与另一个具有相似列的非空行
Posted
技术标签:
【中文标题】python - Pandas - FillNa 与另一个具有相似列的非空行【英文标题】:python - Pandas - FillNa with another non null row having similar column 【发布时间】:2017-02-07 23:07:55 【问题描述】:我想用另一列的值填充一列中的缺失值。
我读到循环遍历每一行是非常糟糕的做法,最好一次完成所有事情,但我不知道如何使用 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
并传递不带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
它将查找Cat1values 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
【讨论】:
明智的解决方案。但如果Cat2
不是唯一的,则不起作用。我建议在dropna()
之后做drop_duplicates("Cat2")
以上是关于python - Pandas - FillNa 与另一个具有相似列的非空行的主要内容,如果未能解决你的问题,请参考以下文章
Python pandas 使用 fillna() 来避免对 NaN 值进行错误拆分
数据分析——python,pandas:DataFrame对象(merge函数,fillna函数的使用)排序