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

如何对含日期时间的DataFrame按日期计算forward looking rolling maximum?

解决按日期计算向前滚动最大值的问题

问题分析

你需要实现的是按每个日期分组,计算当前行之后所有行的Value最大值(最后一行输出NaN),但你现有代码的逻辑是计算当前行及之前的滚动最大值,方向完全错误,因此无法得到预期结果。

正确实现代码

# 确保数据按日期和时间升序排列
df = df.sort_values(by=['Date', 'Time'], ascending=True).reset_index(drop=True)

# 分组计算向前滚动最大值
df['Output'] = df.groupby('Date')['Value'].apply(
    lambda x: x[::-1].expanding().max()[::-1].shift(-1)
)

代码逻辑说明

  1. 排序重置索引:先按Date和Time升序排序,保证每组内的时间顺序正确,避免索引混乱。
  2. 分组处理逻辑:
    • 对每个日期组的Value列,先反转顺序(x[::-1]),把未来的行放到前面。
    • 用expanding().max()计算从当前位置到开头的最大值(对应原顺序中从当前位置到末尾的最大值)。
    • 再次反转结果,恢复原顺序。
    • 最后用shift(-1)把结果向后偏移一位,让当前行对应后面所有行的最大值,最后一行自动变为NaN,完全匹配预期输出。

验证结果

用你提供的测试数据运行上述代码,会得到与预期完全一致的Output列:

Date        Time    Value   Output
01/01/2022  01:00      1.3   1.4
01/01/2022  02:00      1.4   1.2
01/01/2022  03:00      0.9   1.2
01/01/2022  04:00      1.2   NaN
01/02/2022  01:00      5     4
01/02/2022  02:00      4     3 
01/02/2022  03:00      2     3
01/02/2022  04:00      3     NaN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:55:22