在熊猫中合并两个多索引数据框时发生意外的KeyError

时间:2019-05-31 05:39:22

标签: python pandas merge keyerror

我有两个要在第二级的公共列上合并的多索引数据框。尝试外部合并两个df会在最终的合并键上返回意外的KeyError

我已经测试了没有多索引的合并,并且工作正常。我还翻转了合并的顺序,它似乎总是在right_on参数上发生。最后,我确认可以在合并之外访问错误的键系列。

单个索引合并可以正常工作:

[IN]:
df1 = pd.DataFrame({'A1': ['A1', 'A1', 'A2', 'A3'],
                    'B': ['121', '345', '123', '146'],
                    'C': ['K0', 'K1', 'K0', 'K1']})

df2 = pd.DataFrame({'A2': ['A1', 'A3'],
                    'X': ['B0', 'B3'],
                    'Y': ['121', '345'],
                    'Z': ['D0', 'D1']})

fine_merge = pd.merge(df1,df2,how='outer',left_on='A1', right_on='A2')
print(fine_merge)
[OUT]:
  A1    B   C   A2    X    Y    Z
0  A1  121  K0   A1   B0  121   D0
1  A1  345  K1   A1   B0  121   D0
2  A2  123  K0  NaN  NaN  NaN  NaN
3  A3  146  K1   A3   B3  345   D1

多索引键可以正常工作:

[IN]:
df1.columns = pd.MultiIndex.from_tuples([('left_header', c) for c in df1.columns])
df2.columns = pd.MultiIndex.from_tuples([('right_header', c) for c in df2.columns])

print(df2['right_header','A2'])
[OUT]:
0    A1
1    A3
Name: (right_header, A2), dtype: object

但多索引合并返回KeyError

[IN]:
error_merge = pd.merge(df1,df2, how='outer', left_on=['left_header','A1'], right_on=('right_header','A2'))
print(error_merge)
[OUT]:
KeyError: 'A2'

对此我感到很困惑,特别是考虑到如果我撤消合并或df1是正确的,而right_on==['left_header','A1']KeyError: 'A1'

非常感谢您的帮助。

编辑:合并,连接,合并都产生以下结果:


combined
  left_header          right_header                 
       A1    B   C       A2    X      Y    Z
0      A1  121  K0       A1   B0  121.0   D0
1      A1  345  K1       A3   B3  345.0   D1
2      A2  123  K0      NaN  NaN    NaN  NaN
3      A3  146  K1      NaN  NaN    NaN  NaN

1 个答案:

答案 0 :(得分:0)

您可以尝试以下解决方案:

  1. 使用combine.first

    df1.combine_first(df2)

  2. 使用Concat

    pd.concat([df1, df2], axis=1)

  3. 简单的Join

    df1.join(df2, how='outer')