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

Python:如何将数据转换为按用户分组的周度统计数据框?

实现DataFrame按周分组宽表转换的最优方法

完整代码实现

import pandas as pd

# 构造原始数据
df = pd.DataFrame({
    'User': ['x', 'x', 'y', 'z'],
    'Date': ['2021/03/01', '2021/03/09', '2021/03/09', '2021/03/17'],
    'Items': [3, 5, 11, 7]
})

# 转换日期格式并计算当月周数
df['Date'] = pd.to_datetime(df['Date'])
df['Week'] = 'Week ' + ((df['Date'].dt.day - 1) // 7 + 1).astype(str)

# 生成透视表,填充缺失值为0
pivot_result = df.pivot_table(
    index='User',
    columns='Week',
    values='Items',
    aggfunc='sum',
    fill_value=0
).reset_index()

# 添加Total列
pivot_result['Total'] = pivot_result.iloc[:, 1:].sum(axis=1)

# 调整列顺序匹配需求
final_df = pivot_result[['User', 'Week 1', 'Week 2', 'Week 3', 'Total']]

print(final_df)

关键步骤说明

  • 日期与周数处理:将Date转为datetime类型后,通过(day-1)//7 +1计算当月内的周序号(确保3月1日属于Week1,3月9日属于Week2,3月17日属于Week3),再拼接成Week N的格式。
  • 透视表转换:使用pivot_table快速实现长表转宽表,自动按User分组、Week分列,对Items求和并将缺失的周数填充为0,比groupby+unstack更简洁高效。
  • 总计列计算:通过iloc[:,1:]选中所有周数据列,逐行求和得到Total。
  • 列顺序调整:手动指定列顺序,确保输出与需求完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 15:27:21