我正在嘗試實作涉及幾何級數(拆分)的計算。是否有任何有效/高效的方法來做到這一點。資料集有數百萬行。我需要“Traded_quantity”列
| 標記 | 行動 | 交易數量 | ||
|---|---|---|---|---|
| 2019-11-05 | 09:25 | 0 | 0 | |
| 09:35 | 2 | 買 | 3 | |
| 09:45 | 0 | 0 | ||
| 09:55 | 1 | 買 | 4 | |
| 10:05 | 0 | 0 | ||
| 10:15 | 3 | 買 | 56 | |
| 10:24 | 6 | 買 | 8128 |
turtle = 2(用戶定義)
base_quantity = 1(用戶定義)
def turtle_split(row):
if row['Action'] == 'BUY':
return base_quantity * (turtle ** row['Marker'] - 1) // (turtle - 1)
else:
return 0
df['Traded_quantity'] = df.apply(turtle_split, axis=1).round(0).astype(int)
計算
對于第 0 行,Traded_quantity 應為零(因為標記為零)
對于第一行,Traded_quantity 應為 (1x1) (1x2) = 3(標記 2 將分為 1 和 1,第一個 1 將與 base_quantity>>1x1 相乘,第二個 1 將與第一個 1 的結果相乘乘以龜>>1x2),然后我們將這兩個數字相加)
對于第 2 行,Traded_quantity 應為零(因為標記為零)
對于第 3 行,Traded_quantity 應為 (2x2) = 4(標記 1 將乘以第 1 行時間海龜的最后分割,即 2x2)
對于第 4 行,Traded_quantity 應為零(因為標記為零)
對于第 5 行,Traded_quantity 應為 (4x2) (4x2x2) (4x2x2x2) = 56(標記 3 將拆分為 1,1 和 1,第一個 1 將乘以第 3 行的最后一個拆分乘以龜 >>4x2,第二個 1 將與第一個 1 的結果相乘(海龜>>8x2),第三個 1 將與第二個 1 的結果相乘,海龜>>16x2)然后我們將這三個數字相加)
對于第 6 行,Traded_quantity 應為 (32x2) (32x2x2) (32x2x2x2) (32x2x2x2x2) (32x2x2x2x2x2) = 8128
每當有 BUY 時,交易數量將使用 Traded_quantity 乘以 turtle 的最后一批計算。
事實證明,當 Marker 中沒有零時,代碼正在生成正確的 Traded_quantity。一旦有幾個零幾何級數的差距將無濟于事,我將需要以前的無花果(來自快取)重新計算 Traded_q。嘗試使用 lru_cache 進行遞回,沒有用。
uj5u.com熱心網友回復:
這應該作業
def turtle_split(row):
global base_quantity
if row['Action'] == 'BUY':
summation = base_quantity * (turtle ** row['Marker'] - 1) // (turtle - 1)
base_quantity = base_quantity * (turtle ** (row['Marker'] - 1))*turtle
return summation
else:
return 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/419282.html
標籤:
上一篇:我們能否以更有效的方式使用Python解決這個算術問題?
下一篇:函式計算的角度不一致
