熊猫从数月到数周重新取样[英] Pandas resampling from months to weeks

本文是小编为大家收集整理的关于熊猫从数月到数周重新取样的处理方法,想解了熊猫从数月到数周重新取样的问题怎么解决?熊猫从数月到数周重新取样问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我正在尝试将每月数据下采样为每周数据,并有一个月份的时间序列数据框,如下所示:

             qty
PERIOD_NAME 
2017-09-01  49842.0
2017-10-01  27275.0
2017-11-01  29159.0
2017-12-01  51344.0
2018-01-01  19103.0
2018-02-01  23570.0
2018-03-01  45139.0
2018-04-01  25722.0
2018-05-01  22644.0

我尝试过像这样对几周进行重新采样:

tgt_item_by_445_wk = tgt_item_by_445_wk.resample('W').sum()

产生:

             qty
PERIOD_NAME 
2017-09-03  49842.0
2017-09-10  0.0
2017-09-17  0.0
2017-09-24  0.0
2017-10-01  27275.0
2017-10-08  0.0
2017-10-15  0.0
2017-10-22  0.0
2017-10-29  0.0

我尝试过插值,但我无法得到我想要的东西,它是未采样 (0) 的填充,第一个值是这样的:

              qty
PERIOD_NAME 
2017-09-03  12460.5
2017-09-10  12460.5
2017-09-17  12460.5
2017-09-24  12460.5
2017-10-01  5455.0
2017-10-08  5455.0
2017-10-15  5455.0
2017-10-22  5455.0
2017-10-29  5455.0

是否有一些使用重采样、填充和插值的方法可以做到这一点?

推荐答案

让我们试试 asfreq 和 groupby.

v = df.asfreq('W', method='ffill')
v /= v.groupby(v.index.strftime('%Y-%m')).transform('count')

                  qty
PERIOD_NAME          
2017-09-03   12460.50
2017-09-10   12460.50
2017-09-17   12460.50
2017-09-24   12460.50
2017-10-01    5455.00
2017-10-08    5455.00
2017-10-15    5455.00
2017-10-22    5455.00
2017-10-29    5455.00
2017-11-05    7289.75
2017-11-12    7289.75
2017-11-19    7289.75
2017-11-26    7289.75
2017-12-03   10268.80
2017-12-10   10268.80
2017-12-17   10268.80
2017-12-24   10268.80
2017-12-31   10268.80
2018-01-07    4775.75
2018-01-14    4775.75
2018-01-21    4775.75
2018-01-28    4775.75
2018-02-04    5892.50
2018-02-11    5892.50
2018-02-18    5892.50
2018-02-25    5892.50
2018-03-04   11284.75
2018-03-11   11284.75
2018-03-18   11284.75
2018-03-25   11284.75
2018-04-01    5144.40
2018-04-08    5144.40
2018-04-15    5144.40
2018-04-22    5144.40
2018-04-29    5144.40

这很有效,因为您的值总是在每个月的第一天.或者,您可以使用

v /= v.groupby(v.qty).transform('count').values 

第二步.

本文地址:https://www.itbaoku.cn/post/1727996.html