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

如何使用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可快速实现需求,步骤如下:

  1. 加载数据到DataFrame(示例直接构造数据,实际可通过read_csv等方法加载)
  2. 按用户分组,将周作为列维度,聚合clicks和days,缺失值填0
  3. 调整多级列名为目标格式
  4. 重置索引让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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:10:29