python - Pandas:使用波浪号运算符通过两个过滤器返回反向数据

标签 python pandas

我正在使用 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/

相关文章:

python - 使用多个特征训练 sklearn 分类器

python - 创建一个列表项作为键和索引作为值的字典?

python - 查找具有非 na 值的列,并使用非 na 列的名称创建第三列填充值

python - 是否有 pandas 函数来评估子字符串是否在给定字符串中?

python - 机器学习: UserWarning: Pandas doesn't allow columns to be created via a new attribute name

python - 使用逻辑索引和分组依据在 panda 数据框中创建新列

python - 使用重叠的索引切片为 numpy 数组赋值

python - Tornado nginx websockets 握手 400 错误

python - 根据 pandas 中多列的条件删除随机 N 行

python - 每周总和不等于每月总和 pandas