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

sha*_*hay 3 python dataframe pandas

我有这个带有 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
Run Code Online (Sandbox Code Playgroud)

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

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

例如:

condition_cols = ['Col1', 'Col2']

cols = ['Col3', 'Col4']
Run Code Online (Sandbox Code Playgroud)

替换 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
Run Code Online (Sandbox Code Playgroud)

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

Shu*_*rma 6

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

df = df.fillna(df.groupby(condition_cols).transform('mean'))
Run Code Online (Sandbox Code Playgroud)

结果:

  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
Run Code Online (Sandbox Code Playgroud)