【问题标题】:How to calculate the rolling sum on custom time columns?如何计算自定义时间列的滚动总和?
【发布时间】:2018-03-01 08:52:43
【问题描述】:

Pandas 中的滚动功能只能根据行数或日期/时间列计算滚动统计信息。但我想要一个离散时间列来计算滚动总和,如下所示:

key time value
A   1    10
A   2    20
A   4    30
A   7    10
B   1    15
B   2    30
B   3    15

我想先按key 分组,然后计算value 上最接近的3 个time 的滚动总和:

key time value output
A   1    10    10
A   2    20    30(10+20)
A   4    30    60(10+20+30)
A   7    10    40(30+10)
B   1    15    15
B   2    30    45
B   3    15    60

我试过了:

grouped = input.groupby("key", as_index=False)
for name, group in grouped:
    group = group.sort_values("time")
    time = list(group["time"])
    value = list(group["value"])

    #calcRollingStat is a custom function that outputs a list of corresponding results
    out = calcRollingStat(time, value, mode="avg") 
    group["output"] = out #out is a list

但是我不知道如何将grouped 转换回DataFrame。 Pandas 告诉我grouped 中没有reset_index 属性。

我的代码是最好的方法吗?您将如何解决这个问题?

谢谢!

【问题讨论】:

    标签: pandas


    【解决方案1】:

    我相信您可以将GroupBy.apply 与自定义函数一起使用:

    def f(group):
        group = group.sort_values("time")
        time = list(group["time"])
        value = list(group["value"])
    
        #calcRollingStat is a custom function that outputs a list of corresponding results
        group["output"] = calcRollingStat(time, value, mode="avg") 
        return group
    
    
    df = input.groupby("key", as_index=False).apply(f)
    

    【讨论】:

    • 谢谢!我也尝试过使用apply,但我没有意识到我必须在函数中使用return group...
    • 很高兴能帮上忙!美好的一天!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 2023-03-09
    • 2020-08-31
    • 1970-01-01
    相关资源
    最近更新 更多