如何在Pandas中获取记录前N行(含当前行)最大值并完成运算
实现方案
直接使用Pandas内置的rolling滑动窗口方法即可实现,代码简洁高效,符合Pythonic风格:
第一步:构造测试数据
import pandas as pd df = pd.DataFrame({ 'date': ['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04', '2021-01-05', '2021-01-06', '2021-01-07', '2021-01-08', '2021-01-09', '2021-01-10'], 'value': [10, 5, 7, 1, 12, 8, 9, 8, 4, 3] })
第二步:核心计算逻辑
可自定义调整窗口大小N和运算规则:
N = 3 # 计算滑动窗口最大值,min_periods=1表示前N-1行不足窗口大小时自动取已有所有行计算 df['window_max'] = df['value'].rolling(window=N, min_periods=1).max() # 按规则计算数值结果 df['Operation'] = df['value'] / df['window_max'] # 若需要输出示例中的分数字符串格式,可加这行 df['Operation_str'] = df.apply(lambda x: f"{x['value']}/{int(x['window_max'])}", axis=1)
参数说明
window=N:指定滑动窗口大小为N,刚好覆盖当前行+前N-1行,完全匹配需求min_periods=1:避免前N-1行因窗口数据不足返回空值,会自动取当前所有已有行计算最大值
运行后得到的结果和你给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者Ricardo Carrera
相关产品推荐
相关产品推荐

