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
属性。
我的代码是最好的方法吗?你会如何解决这个问题?
谢谢!
答案 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)