如何以首个数据点为起点按1年间隔分组时间序列并标记起始点?
按自定义起始点的1年间隔分组时间序列并设置标签
你需要将时间序列按周年间隔分组:第一个间隔从序列首个数据点(如2000-01-11)开始,覆盖至下一年的前一天(2000-01-11至2001-01-10),后续间隔以此类推;同时新序列的标签为每个间隔的起始日期(如2000-01-11、2001-01-11)。
你提供的原代码问题在于使用了freq='1Y'(日历年度,默认以年末为分界),导致分组不符合自定义起始点的需求。
修正后的代码
import pandas as pd import numpy as np # 生成示例时间序列 i = pd.date_range('2000-01-11', '2022-02-10', freq='D') t = pd.Series(index=i, data=np.random.randint(0,100,len(i))) # 按12个月(周年)间隔分组,起始点为序列首个数据点,标签取间隔左端点 grouped_result = t.groupby(pd.Grouper(freq='12M', origin='start', label='left')).mean() print(grouped_result)
关键参数说明
freq='12M':指定按12个月周期分组,而非日历年度(1Y),确保分组严格从起始点开始每12个月划分一次,匹配你需要的「2000-01-11至2001-01-10」这类间隔。origin='start':强制分组的起始锚点为序列的第一个数据点(2000-01-11),而非默认的日历年初。label='left':将每个分组的标签设置为间隔的左端点(即该组的起始日期),正好对应你需要的2000-01-11、2001-01-11这类标签。
结果验证
分组后的索引会是2000-01-11、2001-01-11、…、2022-01-11,每个索引对应的分组数据为该起始日期至下一年起始日期前一天的所有数据,完全符合需求。
内容的提问来源于stack exchange,提问作者guyguyguy12345
相关产品推荐
相关产品推荐

