如何使用Pandas实现按年统计客户收入流失(revenue churn)
Pandas 实现流失收入统计
实现逻辑说明
完全匹配你提到的计算规则:提取每个客户最后一次交易年份的当年总收入,计入该年份后一年的流失收入,最终按年汇总。
分步代码实现
1. 预处理:计算每个客户单年总收入
合并同客户同年的多笔收入记录:
# 按客户+年份分组求和,得到每个客户每年的累计收入 cust_year_rev = df.groupby(['cust', 'year'], as_index=False)['revenue'].sum()
2. 提取客户最后交易信息
取每个客户的最晚交易年份,以及对应年份的总收入,生成对应的流失年份:
# 按年份排序后取每个客户的最后一条记录,即最后一次交易信息 last_trade = cust_year_rev.sort_values('year').groupby('cust', as_index=False).last() # 流失年份 = 最后交易年份 + 1 last_trade['churn_year'] = last_trade['year'] + 1
3. 按流失年份汇总收入
churn_total = last_trade.groupby('churn_year', as_index=False)['revenue'].sum().rename(columns={'revenue': 'lost_revenue'})
4. 补全所有年份的统计结果
生成完整年份序列,无流失收入的年份填充0:
# 若需自动适配数据年份范围,可替换为以下两行: # min_year = df['year'].min() # max_year = last_trade['churn_year'].max() all_years = pd.DataFrame({'year': range(2013, 2021)}) # 关联流失数据,空值补0 result = all_years.merge( churn_total, left_on='year', right_on='churn_year', how='left' )[['year', 'lost_revenue']].fillna(0)
最终输出的result和你给出的示例格式完全一致。
内容的提问来源于stack exchange,提问作者tichy
相关产品推荐
相关产品推荐

