无法筛选对应多区域分组的唯一客户邮编问题排查
解决筛选多区域分组客户邮编的问题
原始数据
首先定义目标DataFrame:
import pandas as pd df = pd.DataFrame({'Cust_Pincode':[487551,487551,639207,452001,484661,484661], 'REGIONAL_GROUPING':['WEST I','WEST II','TN II','WEST I','WEST I','WEST II'], 'C_LATITUDE':[22.89831,23.74881,10.72208,22.69875,23.88280,23.88280], 'C_LONGITUDE':[78.75441,79.48472,77.94168,75.88575,80.98250,80.98250], 'Region_dist_lim':[33.577743,33.577743,36.812093,33.577743,33.577743,33.577743]})
问题分析
你写的代码df.groupby(['Cust_Pincode','REGIONAL_GROUPING']).filter(lambda x: len(x) > 1)没有输出,原因是同时按Cust_Pincode和REGIONAL_GROUPING分组后,每个分组的长度都是1——每个邮编和区域的组合都是唯一的,所以len(x) > 1的条件永远不满足,自然筛选不到任何数据。
正确思路是:先找出对应多个不同REGIONAL_GROUPING的Cust_Pincode,再筛选这些邮编对应的所有记录,最后整理成预期格式。
解决代码
步骤1:筛选存在多区域分组的邮编
# 统计每个邮编对应的唯一区域数量,筛选数量>1的邮编 multi_region_pincodes = df.groupby('Cust_Pincode')['REGIONAL_GROUPING'].nunique()[lambda x: x>1].index
步骤2:提取目标数据并调整显示格式
# 筛选目标邮编的记录,仅保留需要的列 result = df[df['Cust_Pincode'].isin(multi_region_pincodes)][['Cust_Pincode', 'REGIONAL_GROUPING']] # 让每个邮编仅显示一次,匹配预期输出样式 result['Cust_Pincode'] = result['Cust_Pincode'].where(result['Cust_Pincode'] != result['Cust_Pincode'].shift(), '')
最终输出
执行上述代码后,result的显示效果如下:
Cust_Pincode REGIONAL_GROUPING 0 487551 WEST I 1 WEST II 4 484661 WEST I 5 WEST II
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

