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

如何在Pandas中按周统计时间序列中值为1的出现次数

按周聚合统计指定值出现次数的解决方案

嘿,我来帮你搞定这个问题!你之前用count()确实会统计所有行数,没法针对性统计above_five=1的情况,换个方法就好啦,步骤很清晰:

第一步:先把日期列转成datetime类型

因为resample需要处理日期时间格式的数据,所以先做个转换(你的日期是日/月/年格式,所以指定format='%d/%m/%Y'):

df['date'] = pd.to_datetime(df['date'], format='%d/%m/%Y')

第二步:按周聚合并统计1的出现次数

直接对above_five列用sum()就可以啦——因为1加起来就是出现的次数,0不会影响结果,完美契合你的需求:

# 按周聚合,sum统计1的次数
final_df = df.resample('W', on='date')['above_five'].sum().reset_index()
# 把列名改成你想要的名字
final_df.rename(columns={'above_five': 'above_five_counts'}, inplace=True)

关于周标识的小调整

默认resample('W')会用每周的周日作为周的标识日期,如果你想改成周一(因为你假设2021年2月1日是周一),只需要把参数改成'W-MON':

final_df = df.resample('W-MON', on='date')['above_five'].sum().reset_index()

这样结果里的date列就会显示每周的周一日期。要是你想显示成"Week 1"这种格式,再加一行格式转换:

final_df['date'] = final_df['date'].dt.strftime('Week %U')

最终你会得到的结果

按照你的示例数据,运行后会得到:

dateabove_five_counts
2021-02-072

(如果用W-MON的话,date会是2021-02-01,对应Week 05,因为2021年2月第一周是第5周)

为啥之前的count()不行?

count()是统计分组里所有非空的行数,不管值是0还是1,所以会把所有行都算进去。而sum()刚好适配你这种0/1标记的场景,直接累加1的数量,完全符合你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 11:27:32