【问题标题】:Restart cumulative sum in pandas dataframe重新启动熊猫数据框中的累积和
【发布时间】:2019-05-10 13:41:48
【问题描述】:

我正在尝试在熊猫数据框中开始累积和,每次绝对值高于 0.009 时重新启动。可以给你我尝试的摘录,但我认为它们只会分散你的注意力。已经用np.where 尝试了几件事,但在某个时候它们开始重叠并且它排除了错误的东西。

b 列是所需的输出。

df = pd.DataFrame({'values':(49.925,49.928,49.945,49.928,49.925,49.935,49.938,49.942,49.931,49.952)})
df['a']=df.diff()

 values      a      b
0  49.925    NaN  0.000
1  49.928  0.003  0.003
2  49.945  0.017  0.020 (restart cumsum next row)
3  49.928 -0.017 -0.017 (restart cumsum next row)
4  49.925 -0.003 -0.003
5  49.935  0.010  0.007
6  49.938  0.003  0.010 (restart cumsum next row)
7  49.942  0.004  0.004
8  49.931 -0.011 -0.007
9  49.952  0.021  0.014 (restart cumsum next row)

所以真正的目标是让python明白我要在累计和超过绝对值0.009时重新开始

【问题讨论】:

    标签: pandas dataframe where cumulative-sum


    【解决方案1】:

    我无法以矢量化方式解决此问题,但应用有状态函数似乎可行。

    import pandas as pd
    from pandas.compat import StringIO
    print(pd.__version__)
    
    df = pd.DataFrame({'values':(49.925,49.928,49.945,49.928,49.925,49.935,49.938,49.942,49.931,49.952)})
    df['a']=df.diff()
    
    accumulator = 0.0
    reset = False
    def myfunc(x):
        global accumulator, reset
        if(reset):
            accumulator = 0.0
            reset = False
        accumulator += x 
        if abs(accumulator) > .009: 
            reset = True
        return accumulator
    
    df['a'].fillna(value=0, inplace=True)
    df['b'] = df['a'].apply(myfunc)
    print(df)
    
    

    生产

    0.24.2
       values      a      b
    0  49.925  0.000  0.000
    1  49.928  0.003  0.003
    2  49.945  0.017  0.020
    3  49.928 -0.017 -0.017
    4  49.925 -0.003 -0.003
    5  49.935  0.010  0.007
    6  49.938  0.003  0.010
    7  49.942  0.004  0.004
    8  49.931 -0.011 -0.007
    9  49.952  0.021  0.014
    
    

    【讨论】:

    • 感谢您的努力。然而,它接近了,不会产生 B 列(因为是所需的输出)。如果您对如何生成此输出有任何想法,请告诉我。
    • 这只是一个小的边界问题 - 可能会降低 cumsum_exceeds col。我会在今晚/明天晚些时候更新。
    • 我还没找到,如果你能检查一下脚本将不胜感激!
    • 答案已更新,删除了无法使用的矢量化方法。
    • 传奇,这就像一个魅力。感谢您帮助我!
    猜你喜欢
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 2017-05-15
    • 1970-01-01
    相关资源
    最近更新 更多