将列列表中的NaN值替换为其他列列表的平均值

我有这个带有 NaN 的数据框:

  Col1 Col2  Col3  Col4
0    A    c   1.0   2.0
1    A    c   3.0   6.0
2    B    c   5.0   NaN
3    A    d   6.0   4.0
4    A    c   NaN   1.0
5    A    d   NaN   3.0
6    B    c   5.0   4.0

我想用列表中的标签替换列中存在的缺失值 cols

要替换的值计算为相应组的非缺失值的平均值。根据列表中带有标签的列中的值形成组condition_cols

例如:

condition_cols = ['Col1', 'Col2']

cols = ['Col3', 'Col4']

替换 NaN 后,数据框将如下所示:

  Col1 Col2  Col3  Col4
0    A    c   1.0   2.0
1    A    c   3.0   6.0
2    B    c   5.0   4.0
3    A    d   6.0   4.0
4    A    c   2.0   1.0
5    A    d   6.0   3.0
6    B    c   5.0   4.0
  Col1 Col2  Col3  Col4
0    A    c   1.0   2.0
1    A    c   3.0   6.0
2    B    c   5.0   4.0
3    A    d   6.0   4.0
4    A    c   2.0   1.0
5    A    d   6.0   3.0
6    B    c   5.0   4.0

我尝试取重复的平均值,condition_cols但计算的平均值是针对每个组的,并非特定于任何组。

回答

您可以groupby打开condition_colstransform使用数据框mean,最后使用它fillna来填充缺失值:

df = df.fillna(df.groupby(condition_cols).transform('mean'))

结果:


以上是将列列表中的NaN值替换为其他列列表的平均值的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>