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

Pandas groupby后如何获取排除末尾指定数的倒数N条分组数据

Pandas groupby分组后取倒数N条并排除最新K条的实现方案

核心实现逻辑

  • 自定义两个参数:n为需要提取的倒数数据条数,offset为需要排除的最新数据条数
  • 对每个分组使用iloc切片,利用Python切片左闭右开的特性,范围取[-n-offset : -offset]即可刚好跳过最后offset条,取前面的n条
  • 也可以用tail(n+offset).head(n)的组合实现相同效果,可读性更强

完整代码示例

import pandas as pd

# 构造测试数据
df = pd.DataFrame({
    'A': [1,1,1,1,1,1,1,1,1],
    'B': [1,2,3,4,5,6,7,8,9]
})

# 自定义参数
n = 3  # 取倒数3条
offset = 2  # 排除最新2条

# 方案1:iloc切片实现(自带边界兼容)
result = df.groupby('A', group_keys=False).apply(
    lambda x: x.iloc[max(0, len(x)-n-offset) : len(x)-offset]
)

# 方案2:tail+head组合实现(写法更直观)
# result = df.groupby('A', group_keys=False).apply(
#     lambda x: x.tail(n + offset).head(n)
# )

print(result)

执行后输出结果完全符合预期:

A  B
4  1  5
5  1  6
6  1  7

边界处理说明

  • 代码中加入max(0, len(x)-n-offset)是为了兼容分组总长度小于n+offset的场景,不会出现索引报错,会自动返回排除offset条后剩余的所有数据
  • 如果要求分组长度不足n+offset时返回空,可以在lambda中补充判断逻辑:
    lambda x: x.iloc[len(x)-n-offset : len(x)-offset] if len(x) >= n+offset else pd.DataFrame(columns=x.columns)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:36:04