Python实现单分组多聚合类型的数据统计(类SQL分组查询)
Pandas实现分组聚合(对应SQL GROUP BY多聚合操作)
输入DataFrame
| category | name | cost | cost2 |
|---|---|---|---|
| Tier1 | Tina | 10 | 5 |
| Tier1 | Jessy | 20 | 15 |
| Tier1 | Tina | 30 | 10 |
目标输出DataFrame
| category | count distinct name | sum of cost | avg of cost2 |
|---|---|---|---|
| Tier1 | 2 | 60 | 10 |
需求等效于SQL语句:
SELECT category, COUNT(DISTINCT name), SUM(cost), AVG(cost2) GROUP BY category
要求用Python实现,优先单语句完成,且代码需支持扩展到30列的实际场景。
解决方案代码
使用Pandas的groupby+agg组合,通过字典配置列的聚合规则,单语句即可完成:
import pandas as pd # 构造输入数据(实际场景可替换为读取数据源) df = pd.DataFrame({ 'category': ['Tier1', 'Tier1', 'Tier1'], 'name': ['Tina', 'Jessy', 'Tina'], 'cost': [10, 20, 30], 'cost2': [5, 15, 10] }) # 核心聚合语句 result = df.groupby('category', as_index=False).agg({ 'name': ('count distinct name', lambda x: x.nunique()), 'cost': ('sum of cost', 'sum'), 'cost2': ('avg of cost2', 'mean') })
扩展性说明
这种字典式配置完美适配多列场景:
- 字典的键对应原DataFrame的列名
- 每个值是
(输出列别名, 聚合函数)的元组:聚合函数可以是Pandas内置函数名(如sum/mean),也可以是自定义函数(如去重计数用lambda x: x.nunique()) - 新增聚合需求时,只需在字典中添加对应的键值对即可,无需修改核心逻辑,轻松支持30列的复杂聚合
内容的提问来源于stack exchange,提问作者ayako123456
相关产品推荐
相关产品推荐

