熊猫如何使用 groupby 将 NaN 值替换为平均值 [重复]
Posted
技术标签:
【中文标题】熊猫如何使用 groupby 将 NaN 值替换为平均值 [重复]【英文标题】:How does pandas replace NaN values with mean value using groupby [duplicate] 【发布时间】:2018-12-02 03:46:54 【问题描述】:我尝试使用 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 值吗?
【问题讨论】:
您使用的代码看起来是错误的,尤其是 inplace=True 部分。尝试首先获得平均值(在变量中)。当你实现这一点时,你就会填满。如果您希望我们解决这个问题,您应该根据minimal reproducible example 提供您的代码示例。 我有 500 个客户端 ID,这意味着我必须找到平均 500 次,这不是很多工作吗? 【参考方案1】: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)
使用pd.DataFrame.transform
更可取,它会为您处理映射部分:
s = df.groupby('client_name')['feature_count'].transform('mean')
df['feature_count'].fillna(s, inplace=True)
【讨论】:
我尝试了你的建议,NaN 值并没有完全消失,它们从 2254 减少到 529 @KrishnaDhruv,猜猜你的一些组可能都是NaN
,看看你的输入。否则,您需要提供minimal reproducible example。
是的!有些组都是NaN。感谢您的洞察力和答案!!!! :))以上是关于熊猫如何使用 groupby 将 NaN 值替换为平均值 [重复]的主要内容,如果未能解决你的问题,请参考以下文章