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

如何获取pandas DatetimeIndex中存在的对应周起始日期

问题说明

现有数据

现有pandas DatetimeIndex对象date_idx如下:

date_idx 
DatetimeIndex(['2021-05-14', '2021-05-17', '2021-05-18', '2021-05-19',
               '2021-05-20', '2021-05-21', '2021-05-24', '2021-05-25',
               '2021-05-26', '2021-05-27', '2021-05-28', '2021-05-31',
               '2021-06-01', '2021-06-02', '2021-06-03', '2021-06-04',
               '2021-06-07', '2021-06-08', '2021-06-09', '2021-06-10',
               '2021-06-11', '2021-06-15', '2021-06-16', '2021-06-17',
               '2021-06-18', '2021-06-21', '2021-06-22', '2021-06-23',
               '2021-06-24', '2021-06-25', '2021-06-28', '2021-06-29',
               '2021-06-30', '2021-07-01', '2021-07-02', '2021-07-05',
               '2021-07-06', '2021-07-07', '2021-07-08', '2021-07-09',
               '2021-07-12', '2021-07-13', '2021-07-14', '2021-07-15',
               '2021-07-16', '2021-07-19', '2021-07-20', '2021-07-21',
               '2021-07-22', '2021-07-23'],
              dtype='datetime64[ns]', name='date', freq=None)

需求

  • 获取索引内每个日期对应的、在当前date_idx中实际存在的周起始日期

已尝试方案

date_idx- date_idx.weekday * np.timedelta64(1, 'D')

该方法返回的是自然周的第一天,不符合需求。例如2021-06-15使用该方法得到的结果是2021-06-14,但该日期不存在于date_idx中,期望返回的是存在的2021-06-15作为该日期对应的周起始日期。


解决方案

核心思路是按自然周(年份+周数,避免跨年周统计错误)对索引日期分组,取每组内的最小日期作为该周在索引中实际存在的起始日期,再映射到所有日期即可。

# 方法1:使用transform直接返回与原索引长度一致的结果,写法简洁
result = date_idx.to_series().groupby(
    [date_idx.isocalendar().year, date_idx.isocalendar().week]
).transform('min')

验证示例:
result['2021-06-15']返回值为Timestamp('2021-06-15 00:00:00'),符合需求。
如果不需要考虑跨年场景,可简化分组键为date_idx.isocalendar().week:

result = date_idx.to_series().groupby(date_idx.isocalendar().week).transform('min')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:00:00