用组平均值替换 NaN 值

Posted

技术标签:

【中文标题】用组平均值替换 NaN 值【英文标题】:Replacing NaN values with group mean 【发布时间】:2019-03-21 12:50:12 【问题描述】:

我有一个由国家、年份和许多其他特征组成的数据框。一个国家有很多年

country  year population.....  etc.
1        2000   5000
1        2001    NaN
1        2002   4800
2        2000

现在数据框中有很多 NaN。 我想将每列中与特定国家对应的每个 NaN 替换为该列的国家平均值。

例如,对于对应于 2001 年国家 1 的人口列中的 NaN,我想使用国家 1 所有年份的平均人口 = (5000+4800)/2。 现在我正在使用 groupby().mean() 方法来找到每个国家的手段,但我遇到了以下困难: 1-当我确定它有价值时,某些方法会以 NaN 的形式出现。为什么会这样? 2-我如何才能访问 groupby 子句中的特定值?换句话说,我怎样才能用正确的平均值替换每个 NaN?

非常感谢。

【问题讨论】:

【参考方案1】:

使用combine_firstgroupby mean

df.combine_first(df.groupby('country').transform('mean'))

或者

df.fillna(df.groupby('country').transform('mean'))

【讨论】:

以上是关于用组平均值替换 NaN 值的主要内容,如果未能解决你的问题,请参考以下文章

用滚动平均值或其他插值替换 NaN 或缺失值

Pandas:用前一个和下一个非缺失值的平均值动态替换 NaN 值

pandas如何使用groupby [duplicate]将NaN值替换为平均值

用前一行和下一行的平均值填充 NaN 值 - Python

Python:替换数组中的 NaN 或 MEAN 而不是 -999 值[重复]

Pandas - 用特定组的平均值替换列中的 NaN