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

按BR_NM统计唯一CUS_ID,再按REGION汇总求和的Pandas实现问题

解决按BR_NM统计唯一客户后按REGION汇总的问题

原始数据

首先创建示例DataFrame:

import pandas as pd
import numpy as np
df = pd.DataFrame({'BR_NM': ['HN', 'HN', 'HP'], 
                   'CUS_ID': ['12345', '12345', '12345'],
                   'ACC_ID': ['12345_1', '12345_2', '12345_3'],
                   'REGION': ['North', 'North', 'North'], 
                   'CUS_TYPE': ['Individual', 'Individual', 'Individual']})

数据预览:

BR_NMCUS_IDACC_IDREGIONCUS_TYPE
HN1234512345_1NorthIndividual
HN1234512345_2NorthIndividual
HP1234512345_3NorthIndividual

需求说明

需先按BR_NM统计唯一CUS_ID的数量(同一客户在不同BR_NM下需分别计数,此场景中客户12345在HN和HP各计1次,总计2),再按REGION字段汇总求和,期望输出:

REGION    CUS_TYPE  North
0  North  Individual      2

问题分析

直接使用pivot_table并设置aggfunc=pd.Series.nunique会得到结果1,因为该操作是对整个REGION分组内的CUS_ID直接去重,没有先按BR_NM做层级分组统计,不符合需求。

解决方案

通过两层分组实现:先按BR_NM、REGION、CUS_TYPE统计唯一客户数,再按REGION和CUS_TYPE汇总求和。

代码实现

# 第一步:按BR_NM、REGION、CUS_TYPE分组,统计每个BR下的唯一客户数
grouped_by_br = df.groupby(['BR_NM', 'REGION', 'CUS_TYPE'])['CUS_ID'].nunique().reset_index()

# 第二步:按REGION和CUS_TYPE汇总求和
final_result = grouped_by_br.groupby(['REGION', 'CUS_TYPE'])['CUS_ID'].sum().reset_index(name='North')

print(final_result)

简洁链式写法

final_result = (df.groupby(['BR_NM', 'REGION', 'CUS_TYPE'])['CUS_ID']
                .nunique()
                .groupby(level=['REGION', 'CUS_TYPE'])
                .sum()
                .reset_index(name='North'))

print(final_result)

输出结果

REGION    CUS_TYPE  North
0  North  Individual      2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 00:20:24