Python实现分类连续数值区间提取及两类统计表格生成
高效生成连续分组的数值区间统计结果(Pandas实现)
针对你的需求,我们可以通过向量式分组替代逐行迭代,高效处理万级数据量,以下是具体实现步骤:
1. 生成分区间的MIN/MAX表
核心思路是先给连续相同cat的行打上分组标识,再按分组统计极值:
import pandas as pd # 构造输入数据(实际使用时替换为你的数据集) input_data = pd.DataFrame({ 'cat': ['A','A','A','A','A','A','A','A','B','B','B','A','A','A','B','B','B','B','B','B','B'], 'num': [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21] }) # 生成连续分组ID:当当前行cat与上一行不同时,分组ID自增 input_data['group_id'] = (input_data['cat'] != input_data['cat'].shift()).cumsum() # 按cat和分组ID聚合,得到每个连续组的最小/最大值 result1 = input_data.groupby(['cat', 'group_id'])['num'].agg(['min', 'max']).reset_index(drop=True) result1.columns = ['Cat', 'MIN', 'MAX']
执行后result1的输出即为你需要的第一个表格:
| Cat | MIN | MAX |
|---|---|---|
| A | 1 | 8 |
| A | 12 | 14 |
| B | 9 | 11 |
| B | 15 | 21 |
2. 生成合并区间的汇总表
基于第一步的结果,按Cat分组后拼接区间字符串即可:
# 按Cat分组,将每个区间格式化为"min-max"后用分号拼接 result2 = result1.groupby('Cat').apply( lambda x: '; '.join(f"{row.MIN}-{row.MAX}" for _, row in x.iterrows()) ).reset_index(name='ranges')
这里的iterrows仅作用于分组后的小数据集(每个Cat对应的区间数量远小于原数据行数),不会影响整体效率。执行后result2的输出为:
| Cat | ranges |
|---|---|
| A | 1-8; 12-14 |
| B | 9-11; 15-21 |
内容的提问来源于stack exchange,提问作者jarsonX
相关产品推荐
相关产品推荐

