私が持っているとしましょう
df
ts v
0 2014-11-03 03:39:42.200914 1
1 2014-11-03 03:39:42.500914 2
2 2014-11-03 03:39:43.600914 3
3 2014-11-03 03:39:43.620914 4
v
すべての行に、次のような 1 秒のルックバック時間間隔内の sの合計が含まれるように、列 s を追加したい
desired_df
s ts v
0 1 2014-11-03 03:39:42.200914 1
1 3 2014-11-03 03:39:42.500914 2
2 3 2014-11-03 03:39:43.600914 3
3 7 2014-11-03 03:39:43.620914 4
では、この追加の列を生成するにはどうすればよいs
ですか?
間隔はオーバーラップする必要がありますが、データフレームのすべての行 (データポイント) に正しいエンドポイントが必要です。つまり、データフレームのすべての行 (データポイント) は、そのサイズの間隔の正しいエンドポイントでなければなりません。
編集: 以下の答えは正しくありませんか?完了
編集:必ずしも1秒だけではなく、14ミリ秒などの一般的な時間間隔でソリューションが機能することを望みます。
どうですか
df['s'] = df.groupby(pd.TimeGrouper(freq='400mS')).transform(numpy.cumsum)
私は得た
ts v s
0 2014-11-03 03:39:42.200914 1 1
1 2014-11-03 03:39:42.500914 2 2
2 2014-11-03 03:39:43.600914 3 3
3 2014-11-03 03:39:43.620914 4 7
インデックス 1 の行は間違っていませんか? s at 03:39:42.500914 は 2+1=3 である必要があります。2 ではありません。最初の 2 行は 400 ミリ秒以内にあるため、それらを合計する必要があります。なぜそうしないのですか?
編集:試してみると
df['s'] = df.groupby(pd.TimeGrouper(freq='340mS')).transform(numpy.cumsum)
時間間隔が短くても、実際にはそのグループ化を実行します。
v s
ts
2014-11-03 03:39:42.200914 1 1
2014-11-03 03:39:42.500914 2 3
2014-11-03 03:39:43.600914 3 3
2014-11-03 03:39:43.620914 4 7
では、TimeGrouper が配置する区切り記号 (区切り記号) はどこにあるのでしょうか? 間隔の右端点を、見ている行 (s が対応する行) と一致させたい