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

如何用Pandas为跨3年时间序列生成按周划分的小时级直方图

按周一至周日周期生成周度小时分箱直方图

解决方案步骤

  • 先确保时间列是datetime类型,若未转换先执行df['timesheet_start'] = pd.to_datetime(df['timesheet_start'])
  • 按周一为起始的周分组,使用pd.Grouper(freq='W-MON')定义周周期,确保每组对应周一到周日的完整一周
  • 遍历每个周分组,对组内数据按1小时分箱统计数量,再绘制独立直方图

完整代码示例

import pandas as pd
import matplotlib.pyplot as plt

# 确保时间列转换为datetime类型(如果未处理过)
df['timesheet_start'] = pd.to_datetime(df['timesheet_start'])

# 按周一起始的周分组,基于timesheet_start列划分区间
weekly_groups = df.groupby(pd.Grouper(key='timesheet_start', freq='W-MON'))

# 遍历每个周分组生成直方图
for week_start, group in weekly_groups:
    # 计算该周的周日结束日期
    week_end = week_start + pd.Timedelta(days=6)
    # 对当前周数据按1小时分箱统计,指定具体列避免多列计数干扰
    hourly_counts = group.groupby(pd.Grouper(key='timesheet_start', freq='60Min')).count()['timesheet_start']
    
    # 绘制直方图
    plt.figure(figsize=(12, 6))
    hourly_counts.plot(kind='bar')
    # 设置明确的标题和轴标签
    plt.title(f'小时分箱直方图:{week_start.date()} 至 {week_end.date()}')
    plt.xlabel('时间(小时)')
    plt.ylabel('记录数量')
    # 调整x轴标签角度避免重叠
    plt.xticks(rotation=45)
    plt.tight_layout()
    plt.show()

关键细节说明

  • freq='W-MON':指定周的起始为周一,每个分组覆盖周一00:00至下周一00:00前的区间,完美匹配你需要的周一至周日周期
  • 指定统计列:count()['timesheet_start']确保只统计目标列的数量,避免DataFrame多列导致的冗余数据
  • 独立图表输出:每个周的直方图单独显示,若需要批量保存可在plt.show()前添加plt.savefig(f'week_{week_start.date()}.png')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 04:32:09