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

如何在Pandas中从每个分组中提取每隔n行的数据?

Pandas按分组提取每隔n行的数据

我需要在Pandas中实现:当每个分组的成员数量大于n时,从每个分组里提取每隔n行的数据。尝试过GroupBy.nth()方法,但它只能从每个分组提取一行数据,无法满足需求。

示例代码

import pandas as pd
x = pd.DataFrame.from_dict({'a': [1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3], 'b': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]})

原始数据

a   b
0   1   1
1   1   2

2   2   3
3   2   4
4   2   5

5   3   6
6   3   7
7   3   8
8   3   9
9   3  10
10  3  11
11  3  12

期望结果(n=2时)

a   b
1   1   2

3   2   4

6   3   7
8   3   9
10  3  11

解决方案

可以通过GroupBy.apply()结合iloc索引筛选来实现需求。核心逻辑是对每个分组,从第n个位置(0-based索引为n-1)开始,以n为步长提取数据:

n = 2
result = x.groupby('a').apply(lambda g: g.iloc[n-1::n]).reset_index(level=0, drop=True)
print(result)

代码解释

  • g.iloc[n-1::n]:针对每个分组g,从索引n-1开始(对应第n行),每隔n行取一行数据,完美匹配“每隔n行提取”的需求。
  • reset_index(level=0, drop=True):移除分组操作生成的额外索引层,保留原始数据的索引结构。

运行上述代码后,输出结果与期望完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 04:57:47