我正在尝试在Pandas数据帧上编写一个简单的查询
A B C
0 1 2.1
0 2 3.0
0 3 4.0
1 0 4.0
我想选择所有行WHERE A=0 and B>1
,所以我希望作为输出
A B C
0 2 3.0
0 3 4.0
我将DataFrame定义如下
df = pd.DataFrame([{'A': 0, 'B': 1, 'C': 2.1}, {'A': 0, 'B': 2, 'C': 3.0}, {'A': 0, 'B': 3, 'C': 4.0}, {'A': 1, 'B': 0, 'C': 4.0}])
然后执行以下查询
df[ (df["A"] == 0) & (df["B"] > 1) ]
A B C
1 0 2 3.0
2 0 3 4.0
它有效,但由于还有更多行,所以在我的实际用例中它很慢。
经过pandas MultiIndexing doc后,我不清楚如何使用索引来提高上述查询的性能。有没有办法可以使用索引来提高上述查询的性能?
答案 0 :(得分:2)
您可以查询基础numpy数组而不是原始数据框:
%timeit df[(df["A"] == 0) & (df["B"] > 1) ]
#1000 loops, best of 3: 1.23 ms per loop
ar = df.values
%timeit ar[(ar[:,0] == 0) & (ar[:,1] > 1)]
#100000 loops, best of 3: 11.5 µs per loop
如果要保留原始索引,请在运行查询之前将其转换为列,然后再返回索引。