合并 pandas 数据框并覆盖列

N M*_*N M 5 python pandas

以这种方式合并到 python 数据帧的最快方法是什么?我有两个具有相似结构的数据框(都有一个主键 id 和一些值列)。我想要做的是根据id合并两个数据框。有没有什么方法可以基于 pandas 操作来做到这一点?我现在的实现方式如下:

import pandas as pd

a = pd.DataFrame({'id': [1,2,3], 'letter': ['a', 'b', 'c']})
b = pd.DataFrame({'id': [1,3,4], 'letter': ['A', 'C', 'D']})
a_dict =  {e[id]: e for e in a.to_dict('record')}
b_dict =  {e[id]: e for e in b.to_dict('record')}
c_dict = a_dict.copy()
c_dict.update(b_dict)
c = pd.DataFrame(list(c.values())
Run Code Online (Sandbox Code Playgroud)

这里,c 相当于

pd.DataFrame({'id': [1,2,3,4], 'letter':['A','b', 'C', 'D']})

   id letter
0   1      A
1   2      b
2   3      C
3   4      D
Run Code Online (Sandbox Code Playgroud)

piR*_*red 7

combine_first

如果'id'是您的主键,则将其用作索引。

b.set_index('id').combine_first(a.set_index('id')).reset_index()

   id letter
0   1      A
1   2      b
2   3      C
3   4      D
Run Code Online (Sandbox Code Playgroud)

mergegroupby

a.merge(b, 'outer', 'id').groupby(lambda x: x.split('_')[0], axis=1).last()

   id letter
0   1      A
1   2      b
2   3      C
3   4      D
Run Code Online (Sandbox Code Playgroud)