【问题标题】: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”列的值在两个数据框中都是唯一的。

谢谢

【问题讨论】:

    标签: python join pandas dataframe


    【解决方案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 而不是一个系列。
    • 太棒了。这实际上有很大帮助
    猜你喜欢
    • 2020-10-13
    • 2016-03-22
    • 1970-01-01
    • 2019-12-28
    • 2017-10-08
    • 2022-10-06
    • 2020-06-19
    • 2016-03-13
    • 2021-05-11
    相关资源
    最近更新 更多