用另一个列列表的平均值替换包含NaN值的列列表中的NaN值。

3

我有一个存在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

我尝试对condition_cols的重复值进行平均,但计算出的平均值是针对所有组而不是特定于任何一组的。

1个回答

6
你可以使用condition_cols对数据框进行分组,并在transform中使用mean,最后使用fillna填充缺失值。
df = df.fillna(df.groupby(condition_cols).transform('mean'))

结果:

  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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接