不确定是否已问过这个问题。但是我想通过将数据帧与另一个数据帧合并来替换它。数据框在某些列中包含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
答案 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