Pandas:使用tilde运算符返回带两个筛选器的逆数据

2024-05-16 19:59:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用isin筛选两个数据帧列。目的是返回两个不同的数据帧:一个满足过滤条件,另一个不满足过滤条件。实际上,数据帧应该是完全相反的。然而,我似乎不能像我想象的那样使用tilde运算符。

一个可重复的例子:

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

不是相反的。我试过在第二个过滤器中添加第二个平铺,但无法使其工作。我哪里做错了,还是有更好的办法?


Tags: 数据iddfdataraw条件cars4
1条回答
网友
1楼 · 发布于 2024-05-16 19:59:37

您需要附加括号:

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

你所做的只是颠倒了第一个条件。

相关问题 更多 >