我有两个要在第二级的公共列上合并的多索引数据框。尝试外部合并两个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
答案 0 :(得分:0)
您可以尝试以下解决方案:
使用combine.first
df1.combine_first(df2)
使用Concat
:
pd.concat([df1, df2], axis=1)
简单的Join
:
df1.join(df2, how='outer')