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

新手求助:如何用Pandas基于多年度CSV按周生成透视表?

如何用Pandas按周生成透视表并自动筛选时间范围?

嘿,我来帮你搞定这个按周生成透视表的问题!你现在手动指定固定日期范围的方式,在处理多年数据时确实太繁琐了,咱们可以利用Pandas自带的时间序列工具来高效实现按周分组和筛选,不用每次手动改日期。

第一步:先统一处理日期列

首先建议你一次性把fecha列转换成datetime类型,避免重复转换:

# 转换日期列,加上errors='coerce'可以处理无效日期格式
df['fecha'] = pd.to_datetime(df['fecha'], errors='coerce')

方案一:生成包含所有周汇总的透视表

如果想要一个整合了所有周数据的透视表(列是每周的周期),可以用pd.Grouper来按周分组,替代原来的单个日期列:

# 先筛选你需要的时间范围(比如2017-03-01到2018-01-15)
date_mask = (df['fecha'] >= '2017-03-01') & (df['fecha'] <= '2018-01-15')
filtered_df = df[date_mask]

# 生成按周聚合的透视表
weekly_pivot = pd.pivot_table(
    filtered_df,
    columns=pd.Grouper(key='fecha', freq='W'),  # freq='W'默认周日为周结束,可用'W-MON'设周一结束
    index=['org', 'tipo', 'estado'],
    values=['destination', 'time_total', 'time_avg'],
    aggfunc={
        'destination': len,
        'time_total': total_secs_inTimeSerie,
        'time_avg': mean_secs_inTimeSerie
    },
    fill_value="",
    margins=True
)

# 保存为HTML文件
weekly_pivot.to_html(report_name)

方案二:为每一周单独生成透视表

如果需要给每个周单独生成一份报表(比如每周一个HTML文件),可以先按周拆分数据,再循环处理:

# 转换日期列
df['fecha'] = pd.to_datetime(df['fecha'], errors='coerce')

# 筛选目标时间范围
date_mask = (df['fecha'] >= '2017-03-01') & (df['fecha'] <= '2018-01-15')
filtered_df = df[date_mask]

# 按周分组
weekly_groups = filtered_df.groupby(pd.Grouper(key='fecha', freq='W'))

# 遍历每个周生成报表
for week_end_date, week_data in weekly_groups:
    # 跳过没有数据的周
    if week_data.empty:
        continue
    
    # 生成该周的透视表
    week_pivot = pd.pivot_table(
        week_data,
        columns='fecha',  # 保留该周的单日数据,也可以换成周标识
        index=['org', 'tipo', 'estado'],
        values=['destination', 'time_total', 'time_avg'],
        aggfunc={
            'destination': len,
            'time_total': total_secs_inTimeSerie,
            'time_avg': mean_secs_inTimeSerie
        },
        fill_value="",
        margins=True
    )
    
    # 生成带周日期的文件名
    report_filename = f"weekly_report_{week_end_date.strftime('%Y-%m-%d')}.html"
    # 保存文件
    week_pivot.to_html(report_filename)

小提示

  • 调整周的起始/结束:freq参数可以自定义周的计算方式,比如'W-MON'表示每周一作为周结束,'W-FRI'是周五结束,按需选择即可。
  • 自定义聚合函数:确保你的total_secs_inTimeSerie和mean_secs_inTimeSerie函数能正确接收Pandas Series作为输入,避免报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:32:14