我正在使用 isin
过滤两个 DataFrame 列。目的是返回两个不同的 DataFrame:一个满足过滤条件,一个不满足过滤条件。实际上,DataFrames 应该是完全相反的。但是,我似乎无法以我认为可以的方式使用代字号运算符。
一个可重现的例子:
raw_data = {
'id': ['s1', 's2', 's1', 's4', 's2', 's5', 's4', 's2'],
'car': ['ford', 'bmw', 'ford', 'mazda', 'ford', 'bmw', 'audi', 'bmw']}
df_a = pd.DataFrame(raw_data, columns= ['id', 'car'])
values1 = ['s1', 's2']
values2 = ['bmw', 'ford']
df_a[(df_a['id'].isin(values1)) & (df_a['car'].isin(values2))]
返回这个:
id car
0 s1 ford
1 s2 bmw
2 s1 ford
4 s2 ford
7 s2 bmw
这是正确的。但是,如果尝试使用以下方法来反转它:
df_a[~(df_a['id'].isin(values1)) & (df_a['car'].isin(values2))]
我得到:
id car
5 s5 bmw
这不是相反的。我试过向第二个过滤器添加第二个波浪号,但无法正常工作。我哪里出错了,或者有更好的方法吗?
最佳答案
你需要额外的括号:
In [411]:
df_a[~((df_a['id'].isin(values1)) & (df_a['car'].isin(values2)))]
# ^ ^
Out[411]:
id car
3 s4 mazda
5 s5 bmw
6 s4 audi
您所做的只是反转第一个条件。
关于python - Pandas:使用波浪号运算符通过两个过滤器返回反向数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35939552/