You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas在指定前置滚动时间区间求execution_size最大值

问题

需要在Pandas DataFrame中,基于execution_size字段,在滚动时间区间内生成衍生指标:针对每行的timestamp,计算完全位于该行时间戳之前的前2秒至前1秒区间内execution_size的最大值。

示例数据如下:

timestamp     execution_size   expected_output
1    2023-10-02 07:31:42     150              NaN
2    2023-10-02 07:31:42.5   180              NaN
3    2023-10-02 07:31:43     425              150
4    2023-10-02 07:31:43.5   11               180
5    2023-10-02 07:31:44     NaN              425
6    2023-10-02 07:31:45     122              425
7    2023-10-02 07:31:45.5   NaN              11

规则说明:

  • 第1、2行的前2秒至前1秒区间无数据,输出NaN;
  • 第3行的目标区间仅包含第1行,取150;
  • 第4行的目标区间包含第1、2行,取最大值180;
  • 第5行的目标区间包含第1、2、3行,取最大值425;
  • 第6行的目标区间包含第3、4、5行,取最大值425;
  • 第7行的目标区间包含第4、5行,取最大值11。

此前尝试的代码不符合需求,得到的是-3s至-1s区间的结果:

rolling_max = df['execution'].rolling('3s').max().shift(periods=1, freq='1s')
解决方案

可以通过时间偏移+滚动窗口组合实现精准的区间筛选,核心思路是先给所有时间戳做偏移,再用滚动窗口限定区间范围,具体步骤如下:

  1. 确保timestamp列为Pandas的时间类型:
df['timestamp'] = pd.to_datetime(df['timestamp'])
  1. 计算目标区间的最大值:
# 先将每行的时间戳向前偏移1秒,然后以这个偏移后的时间为基准,向前滚动1秒的窗口(即原时间的前2秒到前1秒区间)
df['calculated_output'] = df.set_index('timestamp')['execution_size'] \
    .shift(freq='-1s') \
    .rolling(window='1s', closed='both') \
    .max() \
    .reset_index(drop=True)

代码解释

  • shift(freq='-1s'):把每个时间戳向前偏移1秒,这样后续的滚动窗口就对应原时间的前1秒位置;
  • rolling(window='1s', closed='both'):以偏移后的时间为终点,向前取1秒的窗口,这个窗口正好对应原时间的前2秒到前1秒区间;
  • max():计算窗口内execution_size的最大值,最后重置索引对齐原DataFrame。

验证结果

运行上述代码后,calculated_output列会和示例中的expected_output完全匹配:

calculated_output
0                NaN
1                NaN
2              150.0
3              180.0
4              425.0
5              425.0
6               11.0

内容的提问来源于stack exchange,提问作者IGottaLearnMath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 07:22:32