我正在像这样定制一个pandas数据帧df
。
df = df[
(df.value1 >= threshold1) &
(df.value2 >= threshold2) &
(df.value3.isin(list3))
]
Python具有内置函数all,它允许使用以下语法:
if all([
value1 > threshold1,
value2 > threshold2,
value3 in list3,
]):
而不是:
if (
value1 > threshold1 and
value2 > threshold2 and
value3 in list3,
):
Pandas在Python中有类似于all
的东西吗?感谢。
此外,这是基于多种条件对Pandas数据帧进行子集化的最快方法吗?
答案 0 :(得分:4)
@juanpa.arrivillaga已经为您提供了关于Pandas中布尔索引的非常好的解释。
我想给你一个更好的选择 - DataFrame.query()方法:
df.query("value1 > @threshold1 and value2 > @threshold2 and value3 in @list3")
演示:
In [138]: df = pd.DataFrame(np.random.randint(1, 10, (10, 3)),
columns=['value1','value2','value3'])
In [139]: df
Out[139]:
value1 value2 value3
0 7 9 1
1 4 1 3
2 3 8 8
3 2 8 9
4 9 2 7
5 5 8 9
6 4 2 9
7 7 2 5
8 6 3 5
9 9 1 5
In [140]: threshold1 = 2
In [141]: threshold2 = 4
In [142]: list3 = [1,9]
In [143]: df.query("value1 > @threshold1 and value2 > @threshold2 and value3 in @list3")
Out[143]:
value1 value2 value3
0 7 9 1
5 5 8 9