使用Pandas创建Jan与Mar月份的客户群体迁移矩阵
客户群体迁移矩阵实现方案(Jan vs Mar)
针对20K量级客户,用pandas的向量化操作就能高效实现,步骤清晰且代码简洁:
步骤1:筛选目标月份数据
先从原DataFrame中只提取1月(Jan)和3月(Mar)的记录,减少后续处理的数据量:
import pandas as pd # 假设原数据框名为df,month字段值为'Jan'/'Mar'这类字符串 filtered_df = df[df['month'].isin(['Jan', 'Mar'])]
步骤2:转换为客户-双月份分组宽表
把每个客户的Jan、Mar分组数据合并到同一行,方便后续统计交叉情况:
# 用pivot转置,index是客户ID,columns是月份,values是分组 customer_groups = filtered_df.pivot( index='customer_id', columns='month', values='Group' ).reset_index() # 重命名列,让语义更清晰 customer_groups.columns = ['customer_id', 'Jan_Group', 'Mar_Group']
如果存在同一客户同一月份多条记录的情况,改用pivot_table并指定聚合方式(比如取第一个分组):
customer_groups = filtered_df.pivot_table( index='customer_id', columns='month', values='Group', aggfunc='first' ).reset_index()
步骤3:生成迁移矩阵
用crosstab统计Jan分组到Mar分组的客户数量,直接得到规整的矩阵:
# 过滤掉只存在单月份数据的客户(可选,根据业务需求决定) valid_customers = customer_groups.dropna(subset=['Jan_Group', 'Mar_Group']) # 生成迁移矩阵 migration_matrix = pd.crosstab( index=valid_customers['Jan_Group'], columns=valid_customers['Mar_Group'], margins=True, # 可选,添加行/列总计 margins_name='总计' )
migration_matrix的行是Jan的客户群体,列是Mar的客户群体,单元格值就是对应群体迁移的客户数量。
优势说明
- 所有操作都是pandas内置的向量化运算,处理20K客户毫无压力,速度远快于循环遍历
- 代码逻辑清晰,每一步都对应明确的业务动作,易于维护和修改
- 自动处理群体的所有可能组合,不需要手动枚举群体类型
内容的提问来源于stack exchange,提问作者The Great
相关产品推荐
相关产品推荐

