import pandas as pd
left = pd.DataFrame({'A': ['A1', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['K0', 'K1', 'K0', 'K1']})
right = pd.DataFrame({'AA': ['A1', 'A3'],
'BB': ['B0', 'B3'],
'CC': ['K0', 'K1'],
'DD': ['D0', 'D1']})
我想通过向DD
添加列left
来加入这两个数据框。应根据比较DD
和A
,AA
和B
,BB
和C
来选择CC
的值。
简单的连接案例如下所示,但在我的情况下,我需要比较具有不同名称的列,然后我只想将DD
添加到right
。
result = left.join(right, on='DD')
结果应为:
result = pd.DataFrame({'A': ['A1', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['K0', 'K1', 'K0', 'K1'],
'DD': ['D0', NaN, NaN, 'D1']})
答案 0 :(得分:2)
使用带有merge
和left_on
参数的pandas right_on
方法。
left.merge(right, how='left',
left_on=['A', 'B', 'C'],
right_on=['AA', 'BB', 'CC'])[['A', 'B', 'C', 'DD']]
得到你:
A B C DD
0 A1 B0 K0 D0
1 A1 B1 K1 NaN
2 A2 B2 K0 NaN
3 A3 B3 K1 D1
答案 1 :(得分:1)
看起来你想要merge。
但目前列名称不匹配(A是right
中的AA)
首先让我们将它们标准化:
In [11]: right.columns = right.columns.map(lambda x: x[0])
然后我们可以合并共享列:
In [12]: left.merge(right)
Out[12]:
A B C D
0 A1 B0 K0 D0
1 A3 B3 K1 D1
In [13]: left.merge(right, how="outer")
Out[13]:
A B C D
0 A1 B0 K0 D0
1 A1 B1 K1 NaN
2 A2 B2 K0 NaN
3 A3 B3 K1 D1