我有一个数据集将一些看起来像这样的缺失数据:
id category value
1 A NaN
2 B NaN
3 A 10.5
4 C NaN
5 A 2.0
6 B 1.0
我需要填写null才能在模型中使用数据。类别第一次出现时为NULL。我想做的方法是针对类别
A
和B
这样的情况,这些案例具有多个值,将空值替换为该类别的平均值。对于仅出现一次的C
类,只需填写其余数据的平均值即可。我知道我可以简单地针对诸如
C
这样的情况来获取所有行的平均值,但是我一直在尝试对A和B进行按类别的方式并替换空值。df['value'] = df['value'].fillna(df['value'].mean())
我需要最终的df像这样
id category value
1 A 6.25
2 B 1.0
3 A 10.5
4 C 4.15
5 A 2.0
6 B 1.0
最佳答案
我认为您可以将 groupby
和apply
fillna
与 mean
一起使用。如果某个类别仅具有NaN
值,则获取NaN
,因此请使用列中所有值的 mean
来填充NaN
:
df.value = df.groupby('category')['value'].apply(lambda x: x.fillna(x.mean()))
df.value = df.value.fillna(df.value.mean())
print (df)
id category value
0 1 A 6.25
1 2 B 1.00
2 3 A 10.50
3 4 C 4.15
4 5 A 2.00
5 6 B 1.00
关于python - Pandas :如何用groupby的平均值填充空值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40299055/