2 回答

TA贡献2003条经验 获得超2个赞
您可以尝试以下方法:
import pandas as pd
sample = pd.DataFrame({'x' : pd.np.arange(100),
'colname': pd.np.arange(100)})
conditions = [('index < 5', 'colname < 3'),
('index > 50', 'index < 100', 'colname < 55')]
sample.query('|'.join(map(lambda x: '&'.join(x), conditions)))

TA贡献1843条经验 获得超7个赞
方法是使用数据帧索引切片pd.concat来构建完整的布尔系列:
import numpy as np
import pandas as pd
np.random.seed(0)
df=pd.DataFrame(np.random.randint(0,50,60))
df[pd.concat([df.iloc[:10] > 10, df[11:40] < 30, df[41:] % 2 == 0])]
前 10 条记录过滤小于 10 的值,接下来的 30 个值过滤大于 30 的值,最后一个值检查偶数。
然后您可以使用 dropna 删除所有 NaN 值
输出:
0
0 44.0
1 47.0
2 NaN
3 NaN
4 NaN
5 39.0
6 NaN
7 19.0
8 21.0
9 36.0
10 NaN
11 6.0
12 24.0
13 24.0
14 12.0
15 1.0
16 NaN
17 NaN
18 23.0
19 NaN
20 24.0
21 17.0
22 NaN
23 25.0
24 13.0
25 8.0
26 9.0
27 20.0
28 16.0
29 5.0
30 15.0
31 NaN
32 0.0
33 18.0
34 NaN
35 24.0
36 NaN
37 29.0
38 19.0
39 19.0
40 NaN
41 NaN
42 32.0
43 NaN
44 NaN
45 32.0
46 NaN
47 10.0
48 NaN
49 NaN
50 NaN
51 28.0
52 34.0
53 0.0
54 0.0
55 36.0
56 NaN
57 38.0
58 40.0
59 NaN
添加回答
举报