如何用Python将按UUID分组的事件统计DataFrame转换为宽表
Python实现长表转宽表(UUID分组,事件转独立列)
直接用Pandas的pivot_table或pivot方法就能快速实现需求,以下是具体代码:
1. 导入依赖并构造示例数据
import pandas as pd # 模拟你提供的原始DataFrame data = { 'UUid': ['B32E7AA5B11A40AE', 'B32E7AA5B11A40AE', 'B32E7AA5B11A40AE', '2AEFB3AEA64140BE', '2AEFB3AEA64140BE', 'A0DFAACDEB4D40C1', 'A0DFAACDEB4D40C1', 'A0DFAACDEB4D40C1'], 'Event': ['page XY opened', 'shopcart filled', 'purchase made', 'page XY opened', 'shopcart filled', 'page XY opened', 'shopcart filled', 'purchase made'], 'sum': [121, 92, 23, 221, 21, 1345, 1323, 1321] } df = pd.DataFrame(data)
2. 核心转换代码(推荐用pivot_table)
# 转换为宽表,缺失事件自动填充0 wide_df = df.pivot_table( index='UUid', # 按UUid分组 columns='Event', # 将Event的每个取值转为独立列 values='sum', # 填充到列中的值 fill_value=0, # 缺失事件的填充值 aggfunc='sum' # 聚合方式,因原始数据已统计,sum/first均可 ).reset_index() # 移除列名的层级标签,让格式更贴合目标表 wide_df.columns.name = None
3. 可选:用pivot实现(需确保UUid+Event无重复)
如果你的原始数据中每个UUid和Event的组合是唯一的,也可以用更简洁的pivot:
wide_df = df.pivot(index='UUid', columns='Event', values='sum').fillna(0).reset_index() wide_df.columns.name = None
输出结果
运行后得到的wide_df就是你需要的宽表格式:
| UUid | page XY opened | shopcart filled | purchase made |
|---|---|---|---|
| 2AEFB3AEA64140BE | 221 | 21 | 0 |
| A0DFAACDEB4D40C1 | 1345 | 1323 | 1321 |
| B32E7AA5B11A40AE | 121 | 92 | 23 |
内容的提问来源于stack exchange,提问作者Beginner in the house
相关产品推荐
相关产品推荐

