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 whereCat2` 匹配

这是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 Fillna 中位数不起作用

数据分析——python,pandas:DataFrame对象(merge函数,fillna函数的使用)排序

pandas 处理缺失值[dropna、drop、fillna]

Pandas fillna('Missing')

pandas.DataFrame.fillna - TypeError:只有整数标量数组可以转换为标量索引