如何在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
相关产品推荐
相关产品推荐

