パンダにマルチインデックス データフレームがあり、インデックスは ID とタイムスタンプにあります。各 ID の時系列ローリング合計を計算できるようにしたいのですが、ループなしでそれを行う方法がわかりません。
content = io.BytesIO("""\
IDs timestamp value
0 2010-10-30 1
0 2010-11-30 2
0 2011-11-30 3
1 2000-01-01 300
1 2007-01-01 33
1 2010-01-01 400
2 2000-01-01 11""")
df = pd.read_table(content, header=0, sep='\s+', parse_dates=[1])
df.set_index(['IDs', 'timestamp'], inplace=True)
pd.stats.moments.rolling_sum(df,window=2
そして、この出力は次のとおりです。
value
IDs timestamp
0 2010-10-30 NaN
2010-11-30 3
2011-11-30 5
1 2000-01-01 303
2007-01-01 333
2010-01-01 433
2 2000-01-01 411
ID 0 と 1、および ID 1 と 2 がエッジで重複していることに注意してください (これは望ましくないため、計算が台無しになります)。これを回避する方法の 1 つは、ID で groupby を使用し、その groupby をループしてから、rolling_sum を適用することです。
ループを使用せずにこれを行うのに役立つ機能があると確信しています。