如何计算自定义时间列的滚动总和?

时间:2017-09-20 10:26:52

标签: pandas

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告诉我reset_index中没有grouped属性。

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

谢谢!

1 个答案:

答案 0 :(得分: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)