通过合并替换 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,则使用 map
function 获取给定 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
不确定是否有人问过这个问题。但是我想通过将它与另一个合并来替换数据框中的 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,则使用 map
function 获取给定 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