如何在Pandas中对含分类与连续变量的数据按Customer_ID分组聚合?
按客户分组统计总贷款并保留附属信息
需求描述
按Customer_ID分组,统计每个客户的总贷款金额,同时保留CustomerGender、Agent_ID、AgentGender这三个字段的信息。
原始数据集
import pandas as pd data = {'Customer_ID': [1, 1, 1, 2, 2, 3, 4, 4, 5, 5, 5, 5, 6, 6], 'Loan': [200, 250, 300, 400, 300, 500, 150, 150, 400, 250, 150, 300, 200, 200], 'CustomerGender': ['M', 'M', 'M', 'F', 'F', 'M', 'M', 'M', 'F', 'F', 'F', 'F', 'F', 'F'], 'Agent_ID': [306, 306, 306, 306, 306, 307, 308, 308, 309, 309, 309, 309, 309, 309], 'AgentGender': ['F', 'F', 'F', 'M', 'M','M', 'M', 'M', 'F', 'F', 'F', 'F', 'F', 'F'], 'settlement_value': [23.5, 30.99, 306, 86, 50, 307.35, 1200.54, 25, 48.88, 400, 2100.10, 30, 1309.10, 500.50]} df = pd.DataFrame(data)
常见问题分析
- 仅按
Customer_ID分组调用sum():会直接丢弃CustomerGender、Agent_ID等非数值型字段,无法保留所需信息; - 将
CustomerGender、Agent_ID、AgentGender加入分组键:若数据包含settlement_value,该字段会被自动聚合(如求和),且不符合仅按客户维度统计的需求。
解决方案
方法1:指定字段聚合规则(推荐)
利用groupby+agg,为每个字段明确指定聚合逻辑。由于每个Customer_ID对应的附属信息是唯一的,用first/max即可保留正确值;对Loan用sum计算总额。
result = df.groupby('Customer_ID', as_index=False).agg( Total_Loan=('Loan', 'sum'), CustomerGender=('CustomerGender', 'first'), Agent_ID=('Agent_ID', 'first'), AgentGender=('AgentGender', 'first') # 若需统计settlement_value总和,可添加此行: # Total_Settlement=('settlement_value', 'sum') ) print(result)
方法2:拆分计算后合并
先单独计算总贷款,再提取客户唯一附属信息,最后通过merge合并结果,适合不确定附属字段是否绝对唯一的场景。
# 计算客户总贷款 loan_totals = df.groupby('Customer_ID', as_index=False)['Loan'].sum().rename(columns={'Loan': 'Total_Loan'}) # 提取去重后的客户附属信息 customer_info = df[['Customer_ID', 'CustomerGender', 'Agent_ID', 'AgentGender']].drop_duplicates() # 合并数据 result = pd.merge(loan_totals, customer_info, on='Customer_ID') print(result)
两种方法输出结果一致:
Customer_ID Total_Loan CustomerGender Agent_ID AgentGender 0 1 750 M 306 F 1 2 700 F 306 M 2 3 500 M 307 M 3 4 300 M 308 M 4 5 1100 F 309 F 5 6 400 F 309 F
内容的提问来源于stack exchange,提问作者Andrea Erőss
相关产品推荐
相关产品推荐

