十萬,我有以下數據框:比較快的方式來比較值
Price, Volume
100, 45656
101, 67563
103, 755
...
...
6543, 67567
6544, 7654
在價格欄的每一項都是獨特的,有幾千行。我們的目標是確定一個滾動行數範圍內的低批量價格。換句話說,我沒有試圖確定整個數據框中的最低音量。我在一個滾動的「窗口」上標識了很多低音量的行。
可以說我將滾動窗口設置爲50.我所做的是將當前音量值與上面的50個音量值以及它下面的50個音量值進行比較。如果當前音量值在該範圍內最低,我將相應的價格保存到單獨的列表中。然後我再向下移動一行,並再次比較以查看當前音量值是否小於50以上和以下。下面
我的代碼工作正確地完成這項任務:
rolling_window = 50
total_rows = len(df.index)
current_row = rolling_window
smallest_values = []
while current_row < total_rows - rolling_window:
is_smallest = True
for comparison_row in range(rolling_window):
if vp.iloc[current_row]['Volume'] > vp.iloc[current_row - comparison_row]['Volume'] or \
vp.iloc[current_row]['Volume'] > vp.iloc[current_row + comparison_row]['Volume']:
is_smallest = False
break
if is_smallest and vp.iloc[current_row]['Price'] not in smallest_values:
smallest_values.append(vp.iloc[current_row]['Price'])
current_row += 1
print(smallest_prices)
我的問題是,它與大dataframes(幾千項)時也非常緩慢。我相信必須有一個更好的方式來完成即時通訊嘗試做的更有效。我害怕即時通訊算法使得算法做了比必要的更多的工作,但是我一直沒有想到用另一種方式來做到這一點。
如果有人可以提出更快/更有效的方法,我將不勝感激。
你應該如何處理關係(同分卷價格不同窗口中)? – Alexander 2015-03-25 08:15:29
@Alexander它應該理想地保存所有的關係。即:如果窗口內有幾個價格都相同,應該保存所有價格 – darkpool 2015-03-25 08:20:32