【问题标题】:Python - Merge two Pandas dataframes into one and update the row if the index exists and add a row if it doesn'tPython - 将两个 Pandas 数据帧合并为一个,如果索引存在则更新该行,如果不存在则添加一行
【发布时间】:2021-07-05 18:44:54
【问题描述】:

我正在尝试获取多个相似的数据帧并将它们组合成一个包含所有数据的帧。每个框架都有一个“名称”和一个“In_Frame_#”列,其值为真或假。

我想将所有帧组合成一个单一的帧,该帧具有所有名称,没有重复,并且许多列标记为“In_Frame_#”,并带有相应的 True/False 或空白值。

添加到“完整”数据框时,如果名称存在,则更新该行以包含从传入帧派生的新列的值,如果名称不存在,则添加名称并包含从传入帧派生的新列。

我一直在玩 update()、merge() 和 join() 函数,但还没有破解解决方案。任何帮助或指导将不胜感激。

下表可能有助于形象化我目前的情况。

第一帧看起来像:

Name In_Frame_1
Rick True
Morty True
Jerry True

第二帧看起来像:

Name In_Frame_2
Beth True
Summer True
Jerry True

所需的输出如下所示:

Name In_Frame_1 In_Frame_2
Rick True {blank}
Morty True {blank}
Jerry True True
Beth False True
Summer False True

【问题讨论】:

  • 为什么 In_Frame_1 列中的 BethFalse 而 In_Fame_2 列中的 Rick{blank}?为什么不都{blank}

标签: python pandas dataframe


【解决方案1】:

您可以尝试“外部”合并 2 个数据框,并用 False 填充 NaN(不匹配的条目),如下所示:

df1.merge(df2, how='outer').fillna(False)

结果:

     Name  In_Frame_1  In_Frame_2
0    Rick        True       False
1   Morty        True       False
2   Jerry        True        True
3    Beth       False        True
4  Summer       False        True

如果你想用空白填充NaN(不匹配的条目),你可以使用:

df1.merge(df2, how='outer').fillna('')

结果:

     Name In_Frame_1 In_Frame_2
0    Rick       True           
1   Morty       True           
2   Jerry       True       True
3    Beth                  True
4  Summer                  True

【讨论】:

    【解决方案2】:

    试试:

    df1.set_index('Name').combine_first(df2.set_index('Name')).reset_index()
    

    输出:

         Name In_Frame_1 In_Frame_2
    0    Beth        NaN       True
    1   Jerry       True       True
    2   Morty       True        NaN
    3    Rick       True        NaN
    4  Summer        NaN       True
    

    【讨论】:

      猜你喜欢
      • 2021-04-04
      • 2021-12-10
      • 2014-07-04
      • 2012-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-21
      相关资源
      最近更新 更多