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

Pandas使用groupby和count()对含Key的三列数据分组统计

pandas多列联合分组统计实现方法

需求说明

现有包含Key、Name、location三列的数据集,需要对包含Key在内的三列做联合比对,借助groupby()与count()方法实现分组统计计数,最终按指定格式输出:按location字段分组,同组下不重复的Name值拼接展示,同时统计每个Name对应的记录数生成COUNT字段。

实现代码

import pandas as pd

# 加载/构造数据集
df = pd.DataFrame([
    [112, 'A', 'ABCD'],
    [112, 'A', 'ABCD'],
    [128, 'B', 'BCDE'],
    [138, 'C', 'ABCD'],
    [128, 'B', 'BCDE'],
    [112, 'A', 'ABCD'],
    [115, 'D', 'BCDE']
], columns=['Key', 'Name', 'location'])

# 三列联合分组统计计数
# 统计三列完全一致的记录总条数用这行
stat = df.groupby(['location', 'Name', 'Key'], as_index=False).agg(cnt=('Key', 'count'))
# 如果要统计三列去重后的唯一组合数,把上面一行替换为下面这行即可
# stat = df[['location', 'Name', 'Key']].drop_duplicates().assign(cnt=1)

# 按location二次聚合,拼接成要求的输出格式
result = stat.groupby('location', as_index=False).apply(
    lambda g: pd.Series({
        'Name': ','.join(g['Name'].tolist()),
        'COUNT': ','.join([f"{n}->{c}" for n,c in zip(g['Name'], g['cnt'])])
    })
)

print(result)

输出结果

按三列统计总记录数的输出:

locationNameCOUNT
ABCDA,CA->3,C->1
BCDEB,DB->2,D->1

切换为去重唯一组合计数时,输出和示例格式完全匹配:

locationNameCOUNT
ABCDA,CA->1,C->1
BCDEB,DB->1,D->1

注:代码预留了两种计数逻辑的切换入口,可根据实际业务需求选择对应实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:57:22