如何追踪6月至7月间从Stage1转Stage2用户的变量c变化
解决方案
1. 修正并创建DataFrame
首先修正原代码中的变量名错误(df1应为df),创建正确的数据集:
import pandas as pd df = [[5,'2022-06',1,9],[0,'2022-06',2,3],[1,'2022-07',1,8],[45,'2022-06',2,8],[45,'2022-07',1,3],[0,'2022-07',1,16]] df = pd.DataFrame(df, columns=['ID', 'date', 'Stage', 'c'])
2. 筛选目标用户并生成对比表格
我们需要筛选同时拥有6月和7月记录,且6月处于Stage1、7月转为Stage2的用户,以下是两种简便实现方法:
方法一:拆分月度数据后合并筛选
这种方法逻辑直观,避免数据丢失:
# 提取6月数据,重命名列以区分月度 jun_data = df[df['date'] == '2022-06'].rename(columns={'Stage': 'Stage_Jun', 'c': 'c_Jun'})[['ID', 'Stage_Jun', 'c_Jun']] # 提取7月数据,重命名列 jul_data = df[df['date'] == '2022-07'].rename(columns={'Stage': 'Stage_Jul', 'c': 'c_Jul'})[['ID', 'Stage_Jul', 'c_Jul']] # 内连接合并,仅保留同时有两个月记录的用户 merged = pd.merge(jun_data, jul_data, on='ID', how='inner') # 筛选符合Stage变化条件的用户 result = merged[(merged['Stage_Jun'] == 1) & (merged['Stage_Jul'] == 2)] # 可选:添加Stage变化说明列 result['Stage_Change'] = '1→2'
方法二:透视表合并
通过透视表将月度数据转为列,再筛选条件:
# 透视生成月度c值表 c_pivot = df.pivot_table(index='ID', columns='date', values='c', aggfunc='first').reset_index() c_pivot.columns = ['ID', 'c_Jun', 'c_Jul'] # 透视生成月度Stage表 stage_pivot = df.pivot_table(index='ID', columns='date', values='Stage', aggfunc='first').reset_index() stage_pivot.columns = ['ID', 'Stage_Jun', 'Stage_Jul'] # 合并两个透视表,过滤掉单月记录的用户(NaN值) merged = pd.merge(c_pivot, stage_pivot, on='ID').dropna() # 筛选目标用户 result = merged[(merged['Stage_Jun'] == 1) & (merged['Stage_Jul'] == 2)]
结果说明
最终的result表包含ID、Stage_Jun、c_Jun、Stage_Jul、c_Jul(可选Stage_Change)列,可直接用于绘制双月c值的对比直方图。
注:你的示例数据中没有符合条件的用户,因此结果会为空,但方法适用于真实业务数据。
内容的提问来源于stack exchange,提问作者user13948
相关产品推荐
相关产品推荐

