You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何追踪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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 09:23:06