如何按多列分组并结合tech列所有组合聚合loc列?
问题解决:按多列分组聚合获取唯一值
原数据与需求
原DataFrame定义:
import pandas as pd df = pd.DataFrame({'county':['Laramie']*10 + ['Albany']*12, 'co': ['LU']*22, 'tech':['cable']*6+['copper']*4+['cable']*6+['copper']*4+['Fiber']*2, 'loc':[*'abcdefdefgmnopqrnostow']})
需求:按county、co、tech的所有组合分组,对loc列执行聚合,同时获取唯一值列表和唯一值数量。
原代码的问题
你之前的代码存在两个关键问题:
- 分组键未包含
tech列,无法按tech的不同取值生成分组组合 - 聚合字典中重复使用
loc作为键,后一个nunique会覆盖前一个unique,只能得到单一聚合结果
正确实现代码
方法一:命名参数式聚合(推荐)
这种方式直接给聚合结果指定列名,逻辑清晰:
result = df.groupby(['county', 'co', 'tech'], as_index=False).agg( loc_unique=('loc', 'unique'), loc_nunique=('loc', 'nunique') )
方法二:字典嵌套式聚合
如果习惯用字典格式,可通过元组指定聚合别名:
result = df.groupby(['county', 'co', 'tech'], as_index=False).agg({ 'loc': [('unique_list', 'unique'), ('unique_count', 'nunique')] }) # 扁平化多级列名(可选) result.columns = ['_'.join(col) for col in result.columns]
输出结果
执行方法一代码后,得到的结果表格如下:
| county | co | tech | loc_unique | loc_nunique |
|---|---|---|---|---|
| Albany | LU | Fiber | ['t', 'o'] | 2 |
| Albany | LU | cable | ['m', 'n', 'o', 'p', 'q', 'r'] | 6 |
| Albany | LU | copper | ['n', 'o', 's', 't'] | 4 |
| Laramie | LU | cable | ['a', 'b', 'c', 'd', 'e', 'f'] | 6 |
| Laramie | LU | copper | ['d', 'e', 'f', 'g'] | 4 |
内容的提问来源于stack exchange,提问作者Rac
相关产品推荐
相关产品推荐

