Python 合并表:只有与第二个表不同的ID

Python 合并表:只有与第二个表不同的ID,python,pandas,merge,concat,Python,Pandas,Merge,Concat,我试图弄清楚是否有可能连接/合并/合并两个表,而不是“外部”,我想使用内置选项从第二个表中选择不同的ID 现在,我正在做一些事情 我觉得我的代码不是很优雅: a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['c', '8', '1']] b = [['a', '52', '49'], ['b', '23', '0.05'], ['x', '5', '0']] df1 = pd.DataFrame(a, columns=['id_col', 'two

我试图弄清楚是否有可能连接/合并/合并两个表,而不是“外部”,我想使用内置选项从第二个表中选择不同的ID

现在,我正在做一些事情 我觉得我的代码不是很优雅:

a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['c', '8', '1']]
b = [['a', '52', '49'], ['b', '23', '0.05'], ['x', '5', '0']]
df1 = pd.DataFrame(a, columns=['id_col', 'two', 'three'])
df2 = pd.DataFrame(b, columns=['id_col', 'two', 'three'])


# remove df2 entries also in df1
different_ids = set(df2.id_col).difference(set(df1.id_col))
df2 = df2[df2.id_col.isin(different_ids)]
# merge data frames
df_merged = pd.concat([df1,df2])

合并后的df应该包含df1中的条目a、b、c和df2中的条目x。

我认为您可以通过将
df2
id\u col
进行子集处理来实现这一切,该子集不在
df1.id\u col
isin
中,然后与
df1
进行合并,并生成数据帧:

res = pd.concat([df1, df2[~df2.id_col.isin(df1.id_col)]])

In [186]: res
Out[186]:
  id_col  two three
0      a  1.2   4.2
1      b   70  0.03
2      c    8     1
2      x    5     0
计时:

In [23]: %timeit pd.concat((df1, df2)).drop_duplicates('id_col')
100 loops, best of 3: 1.95 ms per loop

In [24]: %timeit pd.concat([df1, df2[~df2.id_col.isin(df1.id_col)]])
100 loops, best of 3: 1.79 ms per loop

通过计时比较,这会更快。

您可以
concat
df1
df2
,然后
id\u col
列上删除重复项

>>> df = pd.concat((df1, df2))
>>> print(df.drop_duplicates('id_col'))
  id_col  two three
0      a  1.2   4.2
1      b   70  0.03
2      c    8     1
2      x    5     0

请发布一个输入和期望输出的可复制示例。我知道一定有更好的解决方案。谢谢这也行,谢谢-但我不是
df2[df2 blabla]
符号的朋友,因此我接受了科林斯answer@dmeu如果你对计时感兴趣,那会更快,但我认为@Colin的解决方案更具可读性。很高兴知道-但是的,我的首要任务是始终拥有清晰的代码,让未来的我能很容易地理解;)