我有一个大型的数字Pandas数据框df
,我想选择出某一列值在min_value
和max_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()来说,它不能起到加速选择的作用。有什么技巧可以加快选择速度吗?(Pandas 0.11)
filtered_df = df[(df[col_name] >= min_value) & (df[col_name] <= max_value)]
,我认为这是正确的方法。它应该在线性(O(N))时间内运行,而排序通常需要O(N*logN)的时间。另一方面,如果您需要多次进行此类选择,则可以仅对其进行一次排序,然后使用已排序的DF进行选择。 - Roman Pekar.values
会更快,因为没有索引开销。 - DSM.query
功能可以实现,但似乎并不行。希望Jeff或Andy能提供一些建议。 - DSMdf.info()
的结果?这台机器的内存很大吗? - Jeff