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

时间:2020-06-22 13:09:59

标签: python pandas merge 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中的值替换df_group中的NAN值,因此如果df_group中的行具有ID号1111,相应的col1值为200。对于ID为1111的所有行,我想将df中的所有NAN值替换为200。做到这一点的最佳方法是什么?

编辑:说我有这个数据框df_group(Image1),我想根据ID和列名用df_group中的那些值替换df(Image2)中的所有NAN

SampleDF

SampleDF2

1 个答案:

答案 0 :(得分:0)

这有帮助吗?基本上,对于{1,col2,col3中的每一列,使用np.where,我试图检查df中是否为空,如果为空,则使用map函数获取给定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