【问题标题】:Replacing NAN in pandas data frame by merging通过合并替换熊猫数据框中的NAN
【发布时间】:2020-10-12 08:42:58
【问题描述】:

不确定是否有人问过这个问题。但我想通过将数据框中的 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 中的值,因此如果df_group 中的一行具有ID 号1111 并且相应的col1 值为200 . 我想用 200 替换所有 ID 为 1111 的行的 df 中的所有 NAN 值。最好的方法是什么?

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

【问题讨论】:

  • 所以,我假设您有一个带有 Id 的 df 和几个带有 NaN 值的列。另一个带有 Id 的 df 和一个带有非 NaN 值的列。您想要合并这 2 个数据框,并将第一个 df 中的 NaN 替换为第二个 df 中的值。如果您可以发布示例数据集和预期结果会更好。否则我们只是猜测。
  • @davidbilla 我已经用示例数据帧的图像编辑了问题
  • @VadimKatsemba 请不要使用图片...看看stackoverflow.com/questions/20109391/…,了解如何让人们更轻松地为您提供帮助。
  • @JonClements 我的错,我不确定如何正确显示数据框,所以我使用了截屏

标签: python pandas merge nan


【解决方案1】:

这有帮助吗?基本上对于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

【讨论】:

    猜你喜欢
    • 2014-09-25
    • 1970-01-01
    • 2023-01-23
    • 2014-07-07
    • 2015-08-04
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    相关资源
    最近更新 更多