将列列表中的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_cols和transform使用数据框mean,最后使用它fillna来填充缺失值:
df = df.fillna(df.groupby(condition_cols).transform('mean'))
结果: