pandas 按特定日期重新采样

pandas resample by a specific date

我尝试将每周数据重新采样为 4W,但起始周是任意的,但是,基本选项不起作用。 例如:

index = pd.date_range('1/1/2020', periods=14, freq='W')
series = pd.Series(range(14), index=index)             
print(series) 
2020-01-05     0
2020-01-12     1
2020-01-19     2
2020-01-26     3
2020-02-02     4
2020-02-09     5
2020-02-16     6
2020-02-23     7
2020-03-01     8
2020-03-08     9
2020-03-15    10
2020-03-22    11
2020-03-29    12
2020-04-05    13   

默认 4W 垃圾桶 pandas:

print(series.resample('4W', label='left').sum()) 
2019-12-08     0
2020-01-05    10
2020-02-02    26
2020-03-01    42
2020-03-29    13
Freq: 4W-SUN, dtype: int64

我需要的是从1/19到2/9这4周的总和,而不是上面pandas默认的bin

您必须将系列移动 2 个位置。如果第一个累积值无关紧要,您可以删除前两点:

print(series.iloc[2:].resample('4W', label='left').sum())

得到:

2019-12-22     2
2020-01-19    18
2020-02-16    34
2020-03-15    36
Freq: 4W-SUN, dtype: int64

但是由于第一行不见了,所以第一个总和是错误的。正确的做法是在series前加2行,求和,舍弃第一行:

print(series.append(pd.Series(0, index=pd.date_range(end = series.index[0], periods=3, freq='W')[:2])
                    ).sort_index().resample('4W', label='left').sum()[1:])

您现在在每一行中获得正确的值:

2019-12-22     3
2020-01-19    18
2020-02-16    34
2020-03-15    36
Freq: 4W-SUN, dtype: int64