如何对含日期时间的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) )
代码逻辑说明
- 排序重置索引:先按
Date和Time升序排序,保证每组内的时间顺序正确,避免索引混乱。 - 分组处理逻辑:
- 对每个日期组的
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
相关产品推荐
相关产品推荐

