Python中有效分割等比数列(Pythonic Way)
问题描述
我正在尝试实现涉及几何级数(拆分)的计算。有什么有效的/高效的方法来做这件事吗?数据集有数百万行。 我需要列";TRANLED_QUANTITY&QOOT;
标记 | 操作 | 交易量 | ||
---|---|---|---|---|
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 |
乌龟=2 (用户定义)
BASE_QUANTY=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应为零(因为标记为零)
第1行,traded_Quantity应为(1x1)+(1x2)=3(Marker 2将分为1和1,第一个1与Base_Quantity>;>;1x1相乘,第二个1与前1个乌龟>;>;1x2相乘),然后我们将这两个数字相加)
对于第二行,Traded_Quantity应为零(因为标记为零)
对于第三行,traded_Quantity应为(2x2)=4(标记1将乘以第一行时间龟的最后一个拆分,即2x2)
对于第4行,Traded_Quantity应为零(因为标记为零)
对于第5行,Traded_Quantity应为(4x2)+(4x2x2)+(4x2x2x2)=56(标记3将被分成1、1和1,第一个1将乘以行3的最后一个拆分乘以Turtle&>;4x2,第二个1将乘以第一个1与Turtle;>;8x2的结果),第三个1将与第二个1的结果乘以对于第6行,Traded_Quantity应为(32x2)+(32x2x2)+(32x2x2x2)+(32x2x2x2x2)+(32x2x2x2x2x2)=8128
每当要买入时,将使用traded_Quantity乘以Turtle的最后一批计算交易量。
结果是,当Marker中没有零时,代码生成了正确的traded_Quantity。一旦出现两个零的间隙,几何级数将不起作用,我将要求前面的图(来自Cache)重新计算traded_Q。尝试使用lru_cache进行递归,不起作用。
解决方案
这应该可以工作
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
相关文章