Python中有效分割等比数列(Pythonic Way) [英] split geometric progression efficiently in Python (Pythonic way)

查看:64
本文介绍了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

这篇关于Python中有效分割等比数列(Pythonic Way)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆