如何根据大熊猫数据帧的列值加速行选择

时间:2013-11-26 04:59:04

标签: python performance pandas

我有一个大数字Pandas数据框df,我想要选出某些列的值在min_valuemax_value范围内的行。

我可以这样做:

filtered_df = df[(df[col_name].values >= min_value) & (df[col_name].values <= max_value)]

我正在寻找加快速度的方法。我试试以下:

df.sort(col_name, inplace=True)
left_idx = np.searchsorted(df[col_name].values, min_value, side='left')
right_idx = np.searchsorted(df[col_name].values, max_value, side='right')
filtered_df = df[left_idx:right_idx]

但它不适用于df.sort()需要更多时间。

那么,有什么提示可以加速选择吗?

(熊猫0.11)

1 个答案:

答案 0 :(得分:6)

我认为最好的办法是使用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)'

和时间......

%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