基于pandas中的多个键合并两个DataFrame

Sur*_* Li 16 python merge dataframe pandas

pandas(或其他模块)是否具有支持基于多个键合并(或连接)两个表的任何函数?

例如,我有两个表(DataFrames)ab:

>>> a
A  B  value1
1  1      23
1  2      34
2  1    2342
2  2     333

>>> b
A  B  value2
1  1    0.10
1  2    0.20
2  1    0.13
2  2    0.33
Run Code Online (Sandbox Code Playgroud)

期望的结果是:

A  B  value1  value2
1  1      23    0.10
1  2      34    0.20
2  1    2342    0.13
2  2     333    0.33
Run Code Online (Sandbox Code Playgroud)

Ale*_*ley 50

要通过多个键进行合并,您只需将列表中的键传递给pd.merge:

>>> pd.merge(a, b, on=['A', 'B'])
   A  B  value1  value2
0  1  1      23    0.10
1  1  2      34    0.20
2  2  1    2342    0.13
3  2  2     333    0.33
Run Code Online (Sandbox Code Playgroud)

实际上,默认设置pd.merge是使用两个DataFrames的列标签的交集,因此pd.merge(a, b)在这种情况下同样可以正常工作.

  • @EntryLevelR:你可以使用`left_on`和`right_on`参数(而不是`on`)来解决问题. (4认同)
  • 如果列名不同怎么办? (3认同)

Mig*_*eda 7

根据最新的 pandas 文档, on 参数接受字段名称上的alabellist,并且必须在两个数据框中都可以找到。这是一个 MWE 用于它的用途:

a = pd.DataFrame({'A':['0', '0', '1','1'],'B':['0', '1', '0','1'], 'v':True, False, False, True]})

b = pd.DataFrame({'A':['0', '0', '1','1'], 'B':['0', '1', '0','1'],'v':[False, True, True, True]})

result = pd.merge(a, b, on=['A','B'], how='inner', suffixes=['_and', '_or'])
>>> result
    A   B   v_and   v_or

0   0   0   True    False
1   0   1   False   True
2   1   0   False   True
3   1   1   True    True
Run Code Online (Sandbox Code Playgroud)

on :标签或列表要加入的列或索引级别名称。这些必须在两个 DataFrame 中都能找到。如果 on 为 None 并且不合并索引,则默认为两个 DataFrame 中列的交集。

查看最新的pd.merge文档以获取更多详细信息。