У меня есть данные за два года в DataFrame, который выглядит следующим образом:
In[117]: df
Out[117]:
Str% Val% Vol%
State Location Date
NSW Country 2018-01-01 0.043152 0.052147 0.052867
2018-02-01 0.043233 0.050797 0.050907
2018-03-01 0.045113 0.052550 0.052213
2018-04-01 0.045113 0.052237 0.052195
2018-05-01 0.045198 0.050020 0.049767
... ... ...
WA Metro 2019-09-01 0.028958 0.025970 0.027752
2019-10-01 0.029070 0.025906 0.028062
2019-11-01 0.029126 0.024388 0.026421
2019-12-01 0.029126 0.021167 0.023982
2020-01-01 0.029412 0.027437 0.029197
[300 rows x 3 columns]
У данных есть три мультииндекса ['State', 'Location', 'Date']
. Для каждого состояния и местоположения эти данные доступны на ежемесячном уровне. Тем не менее, я хочу преобразовать его в еженедельный уровень и для каждого штата и местоположения. Что-то вроде следующего:
In[119]: df
Out[119]:
Str% Val% Vol%
State Location Date
NSW Country 2018-01-07 0.043152 0.052147 0.052867
2018-01-14 0.043152 0.052147 0.052867
2018-01-21 0.043152 0.052147 0.052867
2018-01-28 0.043152 0.052147 0.052867
2018-02-04 0.043233 0.050797 0.050907
До сих пор я пытался использовать функцию resample () из pandas, но она отказывается работать с многоиндексными объектами. Более того, если я удаляю State и Location из индекса, тогда в моем индексе Date есть дублированные записи, что снова нарушает функцию resample () . Я также пытался использовать «Grouper» в функции groupby () следующим образом:
df= df.reset_index()
Weekly = pd.Grouper(key='Date', freq='W-SUN', closed='left', label='right')
df.groupby(['State', 'Location', Weekly]).first()
Это приводит к следующему выводу,
Out[121]:
Str% Val% Vol%
State Location Date
NSW Country 2018-01-07 0.043152 0.052147 0.052867
2018-02-04 0.043233 0.050797 0.050907
2018-03-04 0.045113 0.052550 0.052213
2018-04-08 0.045113 0.052237 0.052195
2018-05-06 0.045198 0.050020 0.049767
Как вы можете видеть, это только приводит к конвертации текущие даты начала недели и не интерполируют пропущенные недели для каждого месяца.
Любая помощь в этом?