具有匹配索引列的多个表的数据框连接值列

Posted

技术标签:

【中文标题】具有匹配索引列的多个表的数据框连接值列【英文标题】: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 最简单的方法是什么?

【问题讨论】:

你有三个独立的数据框吗? 是的,每个表都有三个单独的数据框。目标表应该在一个新的数据框中。 【参考方案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

【讨论】:

以上是关于具有匹配索引列的多个表的数据框连接值列的主要内容,如果未能解决你的问题,请参考以下文章

将具有多个键的 Python 字典映射到具有多个匹配键的列的数据框中

在 pandas 中,如何在具有匹配行和列的 3 个单独数据帧之间建立相关矩阵?

具有多个值列的数据透视表

通过 vba ms 访问将多值列的数据绑定到组合框中

如何在没有直接连接列的两个数据框之间找到最接近的匹配行?

从 MySQL 中具有不同列的表的多个连接结果中删除重复项