Pandas按特定日期重新采样

2024-04-24 20:24:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试将每周数据重采样到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垃圾箱:

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周的总和,而不是上面的默认bin


Tags: 数据dateindex选项range基础labelseries
1条回答
网友
1楼 · 发布于 2024-04-24 20:24:40

您必须将序列移动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

但是,由于第一行已经消失,第一个总数是错误的。正确的方法是在序列前添加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

相关问题 更多 >