合并~ |在 pandas 过滤器之间

Combining ~ | and between in pandas filter

这里的想法是保留除 4900-4999 和 6000-6999 之间的所有值。但是,此代码根本不起作用。如果我把它分成两行,它似乎有效。现在搜索正确的语法。

crsp = crsp[~(crsp['SICCD'].between(4900, 4999)) | ~(crsp['SICCD'].between(6000, 6999))] 

我能够通过使用 np.where()

来完成此操作
test = np.arange(3000, 8000)
df = pd.DataFrame(test, columns = ['Data'])
df['Check'] = np.where((df['Data'].between(4900, 4999)) | (df['Data'].between(6000, 6999)), True, False)
df.loc[df['Check'] == False]

你的代码基本上是正确的,但你需要使用&,而不是|,因为crsp['SICCD'].between(4900, 4999))crsp['SICCD'].between(6000, 6999)两个条件之一将always 为假(因此否定,always 为真)。例如:

test = random.choices(range(4000,8000), k=20)
df = pd.DataFrame(test, columns=['Data'])

示例数据:

    Data
0   6113
1   4681
2   6891
3   4991
4   6576
5   5087
6   6111
7   5364
8   6658
9   4072
10  4327
11  5517
12  5421
13  6814
14  7099
15  6058
16  4404
17  6397
18  4851
19  6606

现在过滤:

df = df[~(df['Data'].between(4900,4999)) & ~(df['Data'].between(6000,6999))]

输出:

    Data
1   4681
5   5087
7   5364
9   4072
10  4327
11  5517
12  5421
14  7099
16  4404
18  4851