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

如何按多列分组并结合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列执行聚合,同时获取唯一值列表和唯一值数量。

原代码的问题

你之前的代码存在两个关键问题:

  1. 分组键未包含tech列,无法按tech的不同取值生成分组组合
  2. 聚合字典中重复使用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]

输出结果

执行方法一代码后,得到的结果表格如下:

countycotechloc_uniqueloc_nunique
AlbanyLUFiber['t', 'o']2
AlbanyLUcable['m', 'n', 'o', 'p', 'q', 'r']6
AlbanyLUcopper['n', 'o', 's', 't']4
LaramieLUcable['a', 'b', 'c', 'd', 'e', 'f']6
LaramieLUcopper['d', 'e', 'f', 'g']4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:32:50