我想用仅具有类别 B
的行的平均值填充数据帧上 c
上的 NaN 值,并忽略其他行。
print (df)
Category b c
0 A 1 5.0
1 C 1 NaN
2 A 1 4.0
3 B 2 NaN
4 A 2 1.0
5 B 2 Nan
6 C 1 3.0
7 C 1 2.0
8 B 1 NaN
所以我现在正在做的是:
df.c = df.c.fillna(df.c.mean())
但它填充了所有 NaN 值,而我只想填充类别值等于 B
的第 3、5 和 8 行。
最佳答案
将 fillna
与切片赋值相结合
df.loc[df.Category.eq('B'), 'c'] = (df.loc[df.Category.eq('B'), 'c'].
fillna(df.c.mean()))
Out[736]:
Category b c
0 A 1 5.0
1 C 1 NaN
2 A 1 4.0
3 B 2 3.0
4 A 2 1.0
5 B 2 3.0
6 C 1 3.0
7 C 1 2.0
8 B 1 3.0
<小时/>
或者使用 2 个掩码直接赋值
-
pandas.DataFrame.eq
是元素明智的相等运算符。
df.loc[df.Category.eq('B') & df.c.isna(), 'c'] = df.c.mean()
Out[745]:
Category b c
0 A 1 5.0
1 C 1 NaN
2 A 1 4.0
3 B 2 3.0
4 A 2 1.0
5 B 2 3.0
6 C 1 3.0
7 C 1 2.0
8 B 1 3.0
关于python - 根据另一列特定值用平均值填充 NaN 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58985640/