基于用户历史事件的均值、累计事件数及距上次事件天数计算
Pandas用户销售事件数据集计算解决方案
原始数据集
运行提供的代码后,得到的数据集如下:
print(df)
输出:
date User_ID Sales 0 2022-10-16 10:12:00 50 1000 1 2022-10-17 10:12:00 52 1450 2 2022-10-18 10:12:00 50 1390 3 2022-10-19 10:12:00 53 1778 4 2022-10-20 10:12:00 53 1966 5 2022-10-21 10:12:00 52 1100 6 2022-10-22 10:12:00 52 700 7 2022-10-23 10:12:00 52 900
1. 计算每个用户的Sales均值
有两种实现方式:
方式1:单独生成用户均值统计
用groupby按用户分组后计算均值:
user_sales_mean = df.groupby('User_ID')['Sales'].mean().reset_index() user_sales_mean.columns = ['User_ID', 'Sales_Mean'] print(user_sales_mean)
输出:
User_ID Sales_Mean 0 50 1195.0 1 52 1037.5 2 53 1872.0
方式2:将均值合并到原数据每行
用transform方法,把均值结果映射到原数据的对应行:
df['Sales_Mean'] = df.groupby('User_ID')['Sales'].transform('mean') print(df)
原数据会新增一列Sales_Mean,每个用户的所有行都显示该用户的Sales均值。
2. 计算每个用户的累计事件数量
用cumcount()对每个用户的事件从0开始计数,加1后得到累计事件数:
df['Cumulative_Event_Count'] = df.groupby('User_ID').cumcount() + 1 print(df)
输出关键列示例:
date User_ID Sales Cumulative_Event_Count 0 2022-10-16 10:12:00 50 1000 1 1 2022-10-17 10:12:00 52 1450 1 2 2022-10-18 10:12:00 50 1390 2 3 2022-10-19 10:12:00 53 1778 1 4 2022-10-20 10:12:00 53 1966 2 5 2022-10-21 10:12:00 52 1100 2 6 2022-10-22 10:12:00 52 700 3 7 2022-10-23 10:12:00 52 900 4
3. 计算特定用户距离其上次事件的天数
分两种常见场景处理:
场景A:每个事件与该用户上一次事件的间隔天数
先按用户和日期排序,再用diff()计算相邻日期的差值:
# 先按用户、日期排序 df_sorted = df.sort_values(['User_ID', 'date']).reset_index(drop=True) # 计算每个用户相邻事件的天数差 df_sorted['Days_Since_Last_Event'] = df_sorted.groupby('User_ID')['date'].diff().dt.days # 首次事件无前置事件,填充为0 df_sorted['Days_Since_Last_Event'] = df_sorted['Days_Since_Last_Event'].fillna(0) print(df_sorted)
输出关键列示例:
date User_ID Sales Days_Since_Last_Event 0 2022-10-16 10:12:00 50 1000 0.0 1 2022-10-18 10:12:00 50 1390 2.0 2 2022-10-17 10:12:00 52 1450 0.0 3 2022-10-21 10:12:00 52 1100 4.0 4 2022-10-22 10:12:00 52 700 1.0 5 2022-10-23 10:12:00 52 900 1.0 6 2022-10-19 10:12:00 53 1778 0.0 7 2022-10-20 10:12:00 53 1966 1.0
场景B:当前日期与特定用户最后一次事件的间隔天数
指定目标用户ID,获取其最后一次事件日期后计算与当前日期的差值:
target_user_id = 52 # 获取该用户最后一次事件的日期 last_event_date = df[df['User_ID'] == target_user_id]['date'].max() # 计算天数差 days_since_last = (pd.Timestamp.today() - last_event_date).days print(f"用户{target_user_id}距离上次事件已过去{days_since_last}天")
输出示例(根据当前日期动态变化):
用户52距离上次事件已过去XXX天
内容的提问来源于stack exchange,提问作者AAA
相关产品推荐
相关产品推荐

