求助:Pandas中按Employee_id分组统计数据的代码问题
问题解决
错误分析
你的代码存在两个关键问题:
- 分组列名错误:原DataFrame中的分组列是
Employee_id,但你写的是FCE_Employee_id,导致分组逻辑失效。 - 不匹配统计逻辑错误:
x != x.shift()是计算同一列相邻行的差异数,和需求中Cust_Pincode与Pincode的列间比较完全不符。
正确代码实现
方法一:直接在聚合中完成统计
result = df.groupby('Employee_id').agg( No_Of_Customers=('AGMTNO', 'count'), No_Of_Customers_not_matching=('Cust_Pincode', lambda x: (x != df.loc[x.index, 'Pincode']).sum()) ).reset_index().rename(columns={'Employee_id': 'FCE_Employee_id'})
方法二:先构造辅助列再聚合(更直观)
# 先添加标记列,标记是否不匹配 df['is_not_match'] = df['Cust_Pincode'] != df['Pincode'] # 分组聚合 result = df.groupby('Employee_id').agg( No_Of_Customers=('AGMTNO', 'count'), No_Of_Customers_not_matching=('is_not_match', 'sum') ).reset_index().rename(columns={'Employee_id': 'FCE_Employee_id'})
输出结果
运行后会得到你期望的格式:
FCE_Employee_id No_Of_Customers No_Of_Customers_not_matching 0 5035496 3 1
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

