仅按过去重新采样 5 分钟

resample 5 minutes only by past

问题

如何创建在 pandas 中重新采样 5 分钟但仅到当前特定行的列,因此要么从当前观察开始持续 5 分钟,要么间隔 5 分钟但如果我在第 3 分钟重新采样最后 5或最后 3 个,要点是不要在未来重新采样。 DataFrame 按日期时间排序

例如第一行可以忽略,因为还没有累积 5 分钟:

期望的输出


datetime    result  mean
3/1/2022 0:04   1   
3/1/2022 0:05   0   
3/1/2022 0:06   0   
3/1/2022 0:06   1   
3/1/2022 0:07   1   
3/1/2022 0:08   1   
3/1/2022 0:10   1   0.666666667
3/1/2022 0:11   1   0.833333333
3/1/2022 0:12   0   0.8
3/1/2022 0:13   0   0.666666667
3/1/2022 0:14   0   0.4
3/1/2022 0:17   0   0
3/1/2022 0:18   1   0.25
3/1/2022 0:19   1   0.5
3/1/2022 0:20   1   0.75
3/1/2022 0:21   1   0.8
3/1/2022 0:22   1   0.833333333
3/1/2022 0:23   1   1

您需要在两个边界上使用闭区间 rolling

# ensure datetime type
df['datetime'] = pd.to_datetime(df['datetime'])

# compute the rolling mean
df['resample'] = df.rolling('5min', closed='both', on='datetime')['result'].mean()

如果在间隔小于 5 分钟时需要 NaN,可以屏蔽这些值:

df['resample2'] = (df.rolling('5min', closed='both', on='datetime')['result'].mean()
                     ​.where(df['datetime'].sub(df['datetime'].iloc[0]).gt('5min'))
                   )

输出:

              datetime  result  resample  resample2
0  2022-03-01 00:04:00       1  1.000000        NaN
1  2022-03-01 00:05:00       0  0.500000        NaN
2  2022-03-01 00:06:00       0  0.333333        NaN
3  2022-03-01 00:06:00       1  0.500000        NaN
4  2022-03-01 00:07:00       1  0.600000        NaN
5  2022-03-01 00:08:00       1  0.666667        NaN
6  2022-03-01 00:10:00       1  0.666667   0.666667
7  2022-03-01 00:11:00       1  0.833333   0.833333
8  2022-03-01 00:12:00       0  0.800000   0.800000
9  2022-03-01 00:13:00       0  0.600000   0.600000
10 2022-03-01 00:14:00       0  0.400000   0.400000
11 2022-03-01 00:17:00       0  0.000000   0.000000
12 2022-03-01 00:18:00       1  0.250000   0.250000
13 2022-03-01 00:19:00       1  0.500000   0.500000
14 2022-03-01 00:20:00       1  0.750000   0.750000
15 2022-03-01 00:21:00       1  0.800000   0.800000
16 2022-03-01 00:22:00       1  0.833333   0.833333
17 2022-03-01 00:23:00       1  1.000000   1.000000