【问题标题】:Dataframe concat value columns of multiple tables with matching index columns具有匹配索引列的多个表的数据框连接值列
【发布时间】:2022-01-10 17:16:15
【问题描述】:

我在熊猫数据框中有以下表格:

ID1 ID2 Value1
Data1 Data2 Data11
ID1 ID2 Value2
Data1 Data2 Data12
ID1 ID2 Value3
Data1 Data2 Data13

我的目标是表格:

ID1 ID2 Value1 Value2 Value3
Data1 Data2 Data11 Data12 Data13

用 python 最简单的方法是什么?

【问题讨论】:

  • 你有三个独立的数据框吗?
  • 是的,每个表都有三个单独的数据框。目标表应该在一个新的数据框中。

标签: python pandas dataframe concatenation multiple-columns


【解决方案1】:

这与@user17242583 的回答非常相似。唯一的区别是,nth(0) 将获得第一个,即使它是 NaN,而 first 不会。

df_new = pd.concat([df1, df2, df3]).groupby(['ID1', 'ID2'], as_index=False).nth(0)

【讨论】:

    【解决方案2】:

    在一个链中执行多个merges:

    df1.merge(df2.merge(df3))
    
    #      ID1    ID2  Value1  Value2  Value3
    # 0  Data1  Data2  Data11  Data12  Data13
    

    或者使用functools.reduce 语法:

    from functools import reduce
    reduce(lambda L, R: L.merge(R, on=['ID1', 'ID2']), [df1, df2, df3])
    

    【讨论】:

    • 哈哈。我的回答:reduce(lambda dfL, dfR: dfL.merge(dfR, on=['ID1', 'ID2']), [df1, df2, df3])
    【解决方案3】:
    new_df = pd.concat([df1, df2, df3]).groupby(['ID1', 'ID2'], as_index=False).first()
    

    输出:

    >>> new_df
         ID1    ID2  Value1  Value2  Value3
    0  Data1  Data2  Data11  Data12  Data13
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-09
      • 2020-12-03
      • 1970-01-01
      • 2021-09-25
      • 2019-10-13
      • 2021-01-15
      • 1970-01-01
      • 2021-10-16
      相关资源
      最近更新 更多