熊猫如何使用 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 值替换为平均值 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何将用熊猫提取的一列excel数据中的NaN替换为0

如何用熊猫(python)中的其他值替换NAN [重复]

使用带有熊猫数据的 CreateDataFrame 时将 NaN 替换为 null

如何在熊猫中使用 python 循环替换缺失值? [关闭]

如何在熊猫中用 NaN 替换浮点值?

在熊猫中用 NaN 替换空白值(空格)