如何通过比较列从一个pandas DataFrame中筛选出另一个DataFrame的行?
我想从一个数据表中排除掉那些在另一个数据表中也出现的行:
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