我有一個很大的數字熊貓數據框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()花費更多的時間。
那麼,任何提示加快選擇?
(熊貓0.11)
您最初的查詢可以改寫作爲'filtered_df = df [(df [col_name]> = min_value)&(df [col_name] <= max_value]]'我認爲這是正確的做法。它應該工作在線性(O(N))時間與(通常)在O(N * logN)中工作的排序。 OTOH如果您多次進行這樣的選擇,您可以只進行一次排序,然後使用排序的DF進行選擇。 –
@RomanPekar:我認爲通過'.values'會更快,因爲沒有索引開銷。 – DSM
@DSM謝謝,這就是爲什麼我沒有添加答案:)仍然學習關於熊貓/ numpy的東西。你認爲有辦法加快OP任務嗎? –