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

如何使用Pandas按周频率对日期分组并求和count1、count2?

Pandas按日/周聚合求和解决方案

我来帮你搞定这个按时间频率聚合求和的问题,你遇到的报错大概率是因为日期列格式不对,或者分组方式没选对,下面一步步来解决:

第一步:先确保日期列是datetime类型

这是最容易踩的坑!如果你的date列是字符串格式,Pandas根本没法识别成时间维度,分组肯定报错。先执行这行代码转换:

import pandas as pd

# 转换date列为datetime类型
df['date'] = pd.to_datetime(df['date'])

按日求和的两种方法

方法1:用resample(推荐,更灵活)

不用修改原DataFrame的索引,直接指定on='date'参数即可:

# 按日对count1、count2求和
daily_sum = df.resample('D', on='date')[['count1', 'count2']].sum().reset_index()

'D'代表日频率,执行后会得到每天的求和结果,哪怕某天没有数据也会显示(值为0,如果你想过滤空值可以加.dropna())。

方法2:用groupby按日期分组

如果只需要有数据的日期求和,可以用这个:

daily_sum = df.groupby(df['date'].dt.date)[['count1', 'count2']].sum().reset_index()

按周求和的两种方法(重点解决你的报错)

按周分组需要注意一周的起始日,Pandas默认是周日作为一周开始,如果你需要周一作为起始,要额外指定。

方法1:resample指定周频率

同样不用改索引,直接用on='date':

# 默认周日为一周起始,结果的date列是每周日的日期
weekly_sum = df.resample('W', on='date')[['count1', 'count2']].sum().reset_index()

# 如果需要周一作为一周起始,用'W-MON'
weekly_sum_monday = df.resample('W-MON', on='date')[['count1', 'count2']].sum().reset_index()

比如你的数据里,2019-12-09到2019-12-11属于第一周(周日起始的话,这周截止到12-15),2019-12-18到12-21属于第二周,求和结果会自动分组计算。

方法2:groupby按年+周数分组(避免跨年周混淆)

如果你的数据跨年度,直接按周数分组会把不同年份的同周数合并,所以推荐按年+周数组合分组:

# 按年和ISO周数分组求和
weekly_sum = df.groupby(
    [df['date'].dt.year, df['date'].dt.isocalendar().week]
)[['count1', 'count2']].sum().reset_index()

# 可选:把年和周转换成直观的周起始日期(比如周一)
weekly_sum['week_start_date'] = pd.to_datetime(
    weekly_sum.apply(lambda x: f"{x['year']}-W{x['week']}-1", axis=1),
    format="%Y-W%W-%w"
)

常见报错排查

  • 如果还是报错,先检查df['date']的类型:执行print(df['date'].dtype),如果显示object说明没转成datetime,再重新执行第一步的转换。
  • 用resample时如果报错"Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex",说明你没指定on='date',也没把date设为索引,二选一即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:56:38