通过合并替换 pandas 数据框中的 NAN

Replacing NAN in pandas data frame by merging

不确定是否有人问过这个问题。但是我想通过将它与另一个合并来替换数据框中的 NAN 值。数据框在某些列中包含 NAN 值。我将这些列按 id 列中的值分组。所以换句话说,col1, col2, col3 中所有值的总和由一个 id 号决定。

df_group1 = df.groupby('id')[['col1']].sum()
df_group2 = df.groupby('id')[['col2']].sum()
df_group3 = df.groupby('id')[['col3']].sum()

然后我将这三个数据框合并为一个。

df_group = pd.concat([df_group1, df_group2, df_group3], axis = 1)

随后,我将这些值除以包含 id_number

的行的长度
for i in df['id'].unique():
    df_group = df_group/len(df[df['id'] == i])

现在我想将此数据框与 df 合并,以便将 df 中的 NAN 值替换为 df_group 中的 NAN 值,因此如果 df_group 中的一行具有ID 号 1111,相应的 col1 值为 200。我想将 ID 为 1111 的所有行的 df 中的所有 NAN 值替换为 200。最好的方法是什么?

编辑:假设我有这个数据框 df_group(Image1),我想根据 id 和列名 [=] 将 df(Image2) 中的所有 NAN 替换为 df_group 中的那些值21=]

这有帮助吗?基本上对于 col1、col2、col3 中的每一列,使用 np.where,我试图检查它在 df 中是否为 null,如果它为 null,则使用 mapfunction 获取给定 id 的匹配列值

for col in df.columns[1:]:
    df[col] = np.where(df[col].isnull(), df['id'].map(df_group[col]), df[col])

print(df)

结果:

   id   col1   col2   col3
0   4  150.0  501.0  287.0
1   2  318.0  177.0  138.0
2   1   96.0  301.0   90.0
3   1  233.0   81.0  400.0
4   3  194.0  334.0  402.0