合并~ |在 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
这里的想法是保留除 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