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

如何向量化实现Pandas用户事件数据集的累积序列重构?

Pandas向量化实现用户历史事件与当前事件转换

问题背景

原始用户事件数据集结构:

userIDeventIDdateevent
10012020-01-01A
10022020-01-02D
10032020-01-03C
20042020-01-01B

需要转换为包含用户历史事件与当前事件的结构:

userIDhistorycurrent_event
1OA
1AD
1A-DC
2OB

原for循环实现效率极低,需改用向量化操作优化。

向量化实现方案

步骤1:确保数据按用户和时间排序

先对原始数据按userID分组、date排序,保证事件的时间顺序正确:

import pandas as pd

# 假设原始数据存储在df中
df_sorted = df.sort_values(['userID', 'date'])

步骤2:生成用户累积事件序列

通过groupby结合expanding().apply(),生成每个用户从第一个事件到当前事件的累积连接字符串:

# 生成组内累积的事件连接
df_sorted['cumulative_events'] = df_sorted.groupby('userID')['event'].expanding().apply(lambda x: '-'.join(x)).reset_index(level=0, drop=True)

步骤3:生成历史事件列

将累积事件序列向下偏移一位,第一个事件的历史填充为'O',当前事件直接使用原event列:

# 偏移得到历史事件,空值填充为'O'
df_sorted['history'] = df_sorted['cumulative_events'].shift(1).fillna('O')

# 重命名列并筛选需要的字段
final_df = df_sorted[['userID', 'history', 'event']].rename(columns={'event': 'current_event'})

最终结果

执行上述代码后,final_df即为目标结构的数据集,完全通过Pandas向量化操作实现,避免了逐行循环,在大数据集下效率会有显著提升。

优化说明

  • 利用groupby+expanding实现组内累积计算,时间复杂度远低于逐用户逐行循环
  • 所有操作基于Pandas内置向量化方法,避免了频繁的pd.concat拼接,大幅减少内存开销

内容的提问来源于stack exchange,提问作者Hasan Shaukat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 05:05:37