Python 熊猫如何使用groupby将NaN值替换为平均值

Python 熊猫如何使用groupby将NaN值替换为平均值,python,pandas,group-by,pandas-groupby,fillna,Python,Pandas,Group By,Pandas Groupby,Fillna,我尝试使用groupby(client_id或client_name)替换列功能计数中的NaN值(它是一个范围为1到10的整数), 然而,NaN值似乎没有消失 df['feature_count'].isnull().sum() 输出为: 2254 现在我使用: df['feature_count'].fillna(df.groupby('client_name')['feature_count'].mean(), inplace=True) 但产出保持不变: df['feature_co

我尝试使用groupby(client_id或client_name)替换列功能计数中的NaN值(它是一个范围为1到10的整数), 然而,NaN值似乎没有消失

df['feature_count'].isnull().sum()
输出为:

2254
现在我使用:

df['feature_count'].fillna(df.groupby('client_name')['feature_count'].mean(), inplace=True)
但产出保持不变:

df['feature_count'].isnull().sum()

2254
使用按ID分组的列的其他非NaN值替换NaN值的任何其他方法?

df.groupby('client_name')['feature_count'])。mean()返回一个序列

但您不希望用一个系列替换空值。相反,您希望用从序列映射的平均值替换空值

因此,您可以使用以下选项:

s = df.groupby('client_name')['feature_count'].mean()
df['feature_count'].fillna(df['client_name'].map(s), inplace=True)
更为Pandorable的是利用,它为您处理映射部分:

s = df.groupby('client_name')['feature_count'].transform('mean')
df['feature_count'].fillna(s, inplace=True)

您使用的代码看起来是错误的,尤其是inplace=True部分。尝试先获得平均值(在变量中)。当你做到这一点,你就填补了。如果你想让我们解决这个问题,你应该根据提供一个代码示例。我有500个客户端ID,这意味着我必须找到500次平均值,这不是很多工作吗?我尝试了你的建议,NaN值没有完全消失,它们从2254减少到529@KrishnaDhruv,猜测您的一些组可能都是
NaN
,看看您的输入。否则,您需要提供一个。是的!一些小组都是NaN。谢谢你的洞察力和答案!!!!:)