Python中有效分割等比数列(Pythonic Way)

2022-03-02 00:00:00 python math data-science

问题描述

我正在尝试实现涉及几何级数(拆分)的计算。有什么有效的/高效的方法来做这件事吗?数据集有数百万行。 我需要列";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

相关文章