You need to enable JavaScript to run this app. 如何在DataFrame中按分组条件获取某列前n个历史值的列表?
优惠活动
大模型
产品
解决方案
定价
更多

如何在DataFrame中按分组条件获取某列前n个历史值的列表?

按分组滚动获取前3条历史值的代码修改方案

你原来的代码没有按Subject分组,因此滚动计算会跨所有记录执行,按如下修改即可实现需求:

df['Previous'] = df.groupby('Subject')['Score'].apply(
    lambda ser: [win.to_list()[:-1][::-1] for win in ser.rolling(4)]
).tolist()

代码逻辑说明

  • 通过groupby('Subject')将数据按学科分组,滚动操作只会在每个分组的内部执行,不会跨分组统计
  • 滚动窗口大小设为4,每个窗口包含当前行和之前最多3行的Score值,取[:-1]即可去掉当前行的Score,只保留历史值
  • 加[::-1]反转历史值的顺序,实现「最近的历史值排在列表最前面」的输出效果,和你给出的预期输出格式完全匹配

如果你的原始数据需要先按特定字段(比如时间、记录ID)排序再统计历史值,只需要在分组后先做排序即可:

df['Previous'] = df.groupby('Subject', group_keys=False).apply(
    lambda group: group.sort_values('排序字段名')['Score'].rolling(4).apply(
        lambda win: win[:-1][::-1].tolist()
    )
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 03:36:08