2017-09-20 7 views
0

Pandasのローリング機能は、行数または日付/時刻の列に応じてローリング統計を計算することしかできません。しかし、私はローリング合計を計算するための離散時間列、このような何かがしたい:カスタム時間列のローリングサムを計算するにはどうすればよいですか?

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 

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することにより、第1のグループにしたいが、その後、最寄りの3 timeためvalueの圧延合計を計算

私はこの試みた:

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バックを変換する方法を知りません。パンダスは、にはreset_indexという属性がないと言っています。

私のコードはこれを行うための最良の方法ですか?どのようにこの問題に取り組んでいますか?

ありがとうございました!

答えて

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) 
+0

ありがとうございました!私も 'apply'を使って試しましたが、私は関数に' return group'を持っていなければならないと気づきませんでした。 – DarkZero

+0

喜んで助けてください!いい日! – jezrael

関連する問題