python - Pandas - 用另一个具有相似列的非空行填充Na
python - Pandas - FillNa with another non null row having similar column
我想用另一列的值填充一列中的缺失值。
我读到循环遍历每一行是非常糟糕的做法,一次完成所有事情会更好,但我无法找到如何使用 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
您可以使用 fillna
and pass the df without NaN
rows, setting the index to Cat2
and then calling 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
我想用另一列的值填充一列中的缺失值。
我读到循环遍历每一行是非常糟糕的做法,一次完成所有事情会更好,但我无法找到如何使用 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
您可以使用 fillna
and pass the df without NaN
rows, setting the index to Cat2
and then calling 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