Python 合并表:只有与第二个表不同的ID
我试图弄清楚是否有可能连接/合并/合并两个表,而不是“外部”,我想使用内置选项从第二个表中选择不同的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
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的解决方案更具可读性。很高兴知道-但是的,我的首要任务是始终拥有清晰的代码,让未来的我能很容易地理解;)