Python 大熊猫数据帧中如何通过列值加速行选择

Python 大熊猫数据帧中如何通过列值加速行选择,python,performance,pandas,Python,Performance,Pandas,我有一个大的数据框df,我想选择某些列的值在min\u value和max\u value范围内的行 我可以通过以下方式做到这一点: filtered_df = df[(df[col_name].values >= min_value) & (df[col_name].values <= max_value)] 但是它不适用于df。sort()会花费更多的时间 那么,有没有加快选择的技巧 (熊猫0.11)我认为最好的办法是使用numexpr来加快速度 import pand

我有一个大的数据框
df
,我想选择某些列的值在
min\u value
max\u value
范围内的行

我可以通过以下方式做到这一点:

filtered_df = df[(df[col_name].values >= min_value) & (df[col_name].values <= max_value)]
但是它不适用于df。sort()会花费更多的时间

那么,有没有加快选择的技巧


(熊猫0.11)

我认为最好的办法是使用
numexpr
来加快速度

import pandas as pd
import numpy as np
import numexpr as ne

data = np.random.normal(size=100000000)
df = pd.DataFrame(data=data, columns=['col'])
a = df['col']
min_val = a.min()
max_val = a.max()
expr = '(a >= min_val) & (a <= max_val)'

您的初始查询可以重写为
filtered\u df=df[(df[col\u name]>=min\u value)&(df[col\u name]@RomanPekar:我认为通过
.values
进行查询会更快,因为没有索引开销。@DSM谢谢,这就是我没有添加答案的原因:)仍在学习有关pandas/numpy的知识。你认为有什么方法可以加快OP任务的速度吗?我希望新的
.query
功能可以,但似乎没有。希望Jeff或Andy可以提出一些建议。@DSM在胡闹中我也没有让query工作得更快,但我认为它也应该更快(我认为这是它的一个主要用例)。+1在.values上更快…我们在这里谈论的“大”有多大?这就是df.query(在0.13中)在引擎盖下应该做的:)所以我想“升级”是更好的答案。
import pandas as pd
import numpy as np
import numexpr as ne

data = np.random.normal(size=100000000)
df = pd.DataFrame(data=data, columns=['col'])
a = df['col']
min_val = a.min()
max_val = a.max()
expr = '(a >= min_val) & (a <= max_val)'
%timeit eval(expr)
1 loops, best of 3: 668 ms per loop

%timeit ne.evaluate(expr)
1 loops, best of 3: 197 ms per loop