使用特定列连接两个熊猫数据框

Posted

技术标签:

【中文标题】使用特定列连接两个熊猫数据框【英文标题】:join two pandas dataframe using a specific column 【发布时间】:2015-08-15 13:28:06 【问题描述】:

我是 pandas 的新手,我正在尝试根据一个特定列的相等性加入两个数据框。例如假设我有以下内容:

df1
A    B    C
1    2    3
2    2    2

df2
A    B    C
5    6    7
2    8    9

两个数据框具有相同的列,并且只有一列(例如 A)的值可能相等。我想要的输出是这样的:

df3
A    B    C   B    C
2    8    9   2    2

“A”列的值在两个数据框中都是唯一的。

谢谢

【问题讨论】:

【参考方案1】:
pd.concat([df1.set_index('A'),df2.set_index('A')], axis=1, join='inner')

如果您希望将列 A 保持为非索引,则:

pd.concat([df1.set_index('A'),df2.set_index('A')], axis=1, join='inner').reset_index()

【讨论】:

有了这个好方法——A成为索引。这可能是 OP 想要的,但如果需要,您也可以使用 reset_index 将其变成一列。 当然,可以通过在末尾添加.reset_index()来重置索引。 pd.concat([df1.set_index('A'),df2.set_index('A')], axis=1, join='inner').reset_index() 是的 - 这就是我得到的:)【参考方案2】:

或者,您可以这样做:

df3 = df1.merge(df2, on='A', how='inner', suffixes=('_1', '_2'))

然后您可以跟踪每个值的来源

【讨论】:

后缀有什么作用? 为每个列名添加一个后缀,这样你就不会留下例如两列称为"B"。当你有重复的列名时,你会得到非常意想不到的行为,比如 df3['B'].apply(lambda x: ...) 因为现在 df['B'] 是一个 DataFrame 而不是一个系列。 太棒了。这实际上有很大帮助

以上是关于使用特定列连接两个熊猫数据框的主要内容,如果未能解决你的问题,请参考以下文章

熊猫:连接数据框时如何聚合两个列表列

熊猫中的列连接

连接两个系列与无值(熊猫数据框)?

两个熊猫数据框的联合

熊猫两个数据框交叉连接[重复]

熊猫过滤具有特定年份的数据框行