如何在Python和Excel中对指定表格按group by获取min、max统计结果?
用Python和Excel实现连续相同分组的min/max统计
一、Python实现(基于Pandas)
你需要的是对连续相同的col_a值分组统计min和max(而非全局统一分组),具体步骤如下:
- 导入Pandas并构造/加载数据
import pandas as pd # 构造原数据 data = { 'col_a': ['A', 'B', 'B', 'C', 'D', 'D', 'E', 'A', 'A'], 'col_b': [1, 2, 3, 4, 5, 6, 3, 2, 1] } df = pd.DataFrame(data)
- 生成连续分组标识
通过判断当前行col_a与上一行是否相同,创建分组ID:
df['group_id'] = (df['col_a'] != df['col_a'].shift()).cumsum()
- 分组统计min和max
按分组ID和col_a聚合,提取所需统计值:
result = df.groupby(['group_id', 'col_a'])['col_b'].agg(['min', 'max']).reset_index(drop=True)
- 查看结果
print(result)
输出与目标一致:
col_a min max 0 A 1 1 1 B 2 3 2 C 4 4 3 D 5 6 4 E 3 3 5 A 1 2
二、Excel实现
步骤1:创建连续分组ID
假设原数据在A1:B10区域(A1为col_a,B1为col_b):
- 在C2单元格输入公式:
=IF(A2=A1,C1,C1+1) - 下拉填充C列至C10,连续相同的col_a会被标记为同一ID
步骤2:统计min和max
方法1:数据透视表
- 选中
A1:C10区域,点击「插入」→「数据透视表」 - 字段设置:
- 行:col_a、group_id(最后可隐藏group_id列)
- 值:col_b,分别设置为「最小值」和「最大值」
- 调整布局后即可得到目标结果
方法2:函数公式
- 在E2输入:
=UNIQUE(FILTER(A2:A10,C2:C10<>"")),按顺序提取分组的col_a - 在F2输入:
=MINIFS(B2:B10,C2:C10,MATCH(E2,A2:A10,0)),计算对应分组的最小值 - 在G2输入:
=MAXIFS(B2:B10,C2:C10,MATCH(E2,A2:A10,0)),计算对应分组的最大值 - 下拉填充F、G列完成统计
内容的提问来源于stack exchange,提问作者cyntha
相关产品推荐
相关产品推荐

