通过覆盖列合并熊猫数据框

时间:2018-09-19 03:39:18

标签: python pandas

以这种方式合并到python数据帧的最快方法是什么? 我有两个结构相似的数据框(都具有主键ID和一些值列)。 我想做的是基于id合并两个数据帧。有什么办法可以基于熊猫的行动吗?我现在是如何实现的,如下所示:

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())

在这里,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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

一种方法可能如下:

  • 将数据框a附加到数据框b
  • 根据id
  • 删除重复项
  • id排序剩余的值
  • 重置索引并删除旧索引

您可以尝试:

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']})

c = b.append(a).drop_duplicates(subset='id').sort_values('id').reset_index(drop=True)

print(c)

答案 2 :(得分:0)

尝试一下

c = pd.concat([a, b], axis=0).sort_values('letter').drop_duplicates('id', keep='first').sort_values('id')

c.reset_index(drop=True, inplace=True)

print(c)

    id  letter
0   1   A
1   2   b
2   3   C
3   4   D
相关问题