我有两个数据框:
left = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'key': ['K0', 'K1', 'K0', 'K1']},
index = [9,10,11,12])
right = pd.DataFrame({'C': ['C0', 'C1'],
'key': ['K0', 'K1']})
当我运行pd.merge(left, right, on='key')
时,我获得了一个包含 new 索引的新数据框:
A B key C
0 A0 B0 K0 C0
1 A2 B2 K0 C0
2 A1 B1 K1 C1
3 A3 B3 K1 C1
我想要的是这个
A B key C
9 A0 B0 K0 C0
11 A2 B2 K0 C0
10 A1 B1 K1 C1
12 A3 B3 K1 C1
我可以通过pd.merge(left, right, on='key', right_index = True)
来做到这一点,但我觉得这更像是巧合然后的功能。
修改
所以解决方案是这样的:
left.merge(right.set_index("key"), left_on="key", right_index = True)
答案 0 :(得分:2)
你也可以这样做:
left.reset_index().merge(right, on='key').set_index('index')
见这里:How to keep index when using pandas merge
我必须承认,我并不完全确定pandas合并时是否会保留索引,何时不保留索引。我希望对此更加开明!