具有匹配索引列的多个表的数据框连接值列
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】:在一个链中执行多个merge
s:
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 字典映射到具有多个匹配键的列的数据框中