如何通过比较列从一个pandas DataFrame中筛选出另一个DataFrame的行?

5 投票
2 回答
4290 浏览
提问于 2025-04-18 12:47

我想从一个数据表中排除掉那些在另一个数据表中也出现的行:

import pandas

df = pandas.DataFrame({'A': ['Chr1', 'Chr1', 'Chr1','Chr1', 'Chr1', 'Chr1','Chr2','Chr2'], 'B': [10,20,30,40,50,60,15,20]})

errors = pandas.DataFrame({'A': ['Chr1', 'Chr1'], 'B': [20,50]})

所以,df中那些和错误相同的行应该被去掉:

df:
'A'    'B'
Chr1    10
Chr1    30
Chr1    40
Chr1    60
Chr2    15
Chr2    20

用df.merge似乎不太管用,而且我也不想一个一个地检查所有行,因为这些数据表会变得很大。

祝好,

大卫

2 个回答

4

对于两个列,你可以这样做:

 print df[ ~df['A'].isin(errors['A']) | ~df['B'].isin(errors['B']) ]
8

给错误信息添加一列

errors['temp'] = 1

把两个数据表合并在一起

merged_df = pandas.merge(df,errors,how='outer')

现在只保留那些'temp'列是空值的行

merged_df = merged_df[ merged_df['temp'] != 1 ]
del merged_df['temp']

print merged_rdf

      A   B
 0  Chr1  10
 2  Chr1  30
 3  Chr1  40
 5  Chr1  60
 6  Chr2  15
 7  Chr2  20

撰写回答