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

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的输出即为你需要的第一个表格:

CatMINMAX
A18
A1214
B911
B1521

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的输出为:

Catranges
A1-8; 12-14
B9-11; 15-21

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 17:39:24