如何使用Pandas按用户分组转置表格,周维度转列并补0
Pandas实现用户指标按周转置聚合
原始数据
| User ID| Week | clicks | days| |------- |------| -------|-----| | x | 1 | 1 | 1 | | x | 2 | 2 | 3 | | y | 1 | 3 | 2 | | y | 2 | 3 | 2 | | y | 3 | 4 | 3 |
期望输出
| User ID| clicks week 1| clicks week 2| clicks week 3| days week 1| days week 2| days week 3| |--------|--------------| -------------|------------- |------------| -----------|------------| | x | 1 | 2 | 0 | 1 | 3 | 0 | | y | 3 | 3 | 4 | 2 | 2 | 3 |
实现代码与说明
用Pandas的pivot_table可快速实现需求,步骤如下:
- 加载数据到DataFrame(示例直接构造数据,实际可通过
read_csv等方法加载) - 按用户分组,将周作为列维度,聚合
clicks和days,缺失值填0 - 调整多级列名为目标格式
- 重置索引让
User ID成为普通列
完整代码:
import pandas as pd # 构造示例数据 data = { 'User ID': ['x', 'x', 'y', 'y', 'y'], 'Week': [1, 2, 1, 2, 3], 'clicks': [1, 2, 3, 3, 4], 'days': [1, 3, 2, 2, 3] } df = pd.DataFrame(data) # 执行转置聚合 pivoted_df = pd.pivot_table( df, index='User ID', columns='Week', values=['clicks', 'days'], fill_value=0 ) # 重构列名,转为"指标 week N"格式 pivoted_df.columns = [f'{metric} week {week}' for metric, week in pivoted_df.columns] # 重置索引,将User ID转为普通列 result_df = pivoted_df.reset_index() # 输出markdown格式表格验证结果 print(result_df.to_markdown(index=False))
关键说明
pivot_table是核心:自动完成分组、转置操作,fill_value=0直接处理无活动周的填充需求- 多级列处理:转置后列是(指标, 周)的元组结构,通过列表推导式拼接成目标列名
reset_index()确保User ID作为数据列存在,而非索引
内容的提问来源于stack exchange,提问作者kri
相关产品推荐
相关产品推荐

