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

如何按固定2个月间隔统计每日案例数量?

解决按固定2个月间隔统计案例数的思路

步骤分解

要实现按1-2月、3-4月这种固定双月间隔统计,核心是给每个日期映射到对应的双月区间,再按ID+区间分组计数,具体步骤如下:

  • 转换日期格式:将字符串类型的date列转为pandas可处理的datetime类型
  • 生成双月区间标签:通过计算把每个日期归入对应的双月组,生成如2010-01_02的区间标识
  • 分组统计:按ID和双月区间分组,统计每组的案例数量

具体代码实现

import pandas as pd

# 原始数据
d1 = pd.DataFrame({'ID': ["A", "A", "A", "B", "B", "C", "C", "C", "C", "D", "D", "D"],
                   "date": ["2010-12-30", "2010-02-27", "2010-02-26", "2012-01-01", "2012-01-03",
                            "2011-01-01", "2011-01-02", "2011-01-08", "2014-02-21", "2010-08-31", "2010-08-30", "2010-09-01"]})

# 1. 将date列转为datetime类型,方便日期计算
d1['date'] = pd.to_datetime(d1['date'])

# 2. 生成双月区间标签
# 提取年份和月份
d1['year'] = d1['date'].dt.year
d1['month'] = d1['date'].dt.month

# 计算双月组:(month-1)//2 把1-2月归为0组,3-4月归为1组,...,11-12月归为5组
d1['bi_month_group'] = (d1['month'] - 1) // 2

# 根据组计算区间的起始/结束月份,补两位数字保证格式统一
d1['start_month'] = d1['bi_month_group'] * 2 + 1
d1['end_month'] = d1['bi_month_group'] * 2 + 2

# 拼接成目标格式的区间字符串
d1['bi_month'] = d1.apply(lambda row: f"{row['year']}-{row['start_month']:02d}_{row['end_month']:02d}", axis=1)

# 3. 按ID和双月区间分组统计数量,整理成目标格式
result = d1.groupby(['ID', 'bi_month']).size().reset_index(name='count')
result = result.rename(columns={'bi_month': 'date'})

print(result)

代码说明

  • 日期转换:pd.to_datetime()确保日期能被pandas正确识别和运算
  • 双月组计算:(month-1)//2是核心逻辑,通过整数除法将相邻两个月归为同一组
  • 区间格式化:用f-string补零格式化月份,保证区间字符串格式统一(如01而非1)
  • 分组统计:groupby(['ID', 'bi_month']).size()直接统计每组案例数,reset_index()将结果转为标准DataFrame格式

运行结果

执行代码后输出与期望格式完全匹配:

ID        date  count
0  A  2010-01_02      2
1  A  2010-11_12      1
2  B  2012-01_02      2
3  C  2011-01_02      3
4  C  2014-01_02      1
5  D  2010-07_08      2
6  D  2010-09_10      1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:50:46