我在一个看起来像这样的DataFrame中拥有2年的数据:
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
到目前为止,我已经尝试使用pandas的 resample()函数,但是它拒绝使用多索引对象。此外,如果我从索引中删除了State和Location,那么我的Date索引中有重复的条目,这再次破坏了 resample()函数。我还尝试在groupby()函数中使用“ Grouper”,如下所示:
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
如您所见,这只会将当前日期转换为星期开始,而不会插补每个月的缺失星期。
对此有任何帮助吗?
答案 0 :(得分:1)
它看到有每月数据。通过DataFrameGroupBy.resample
更改了解决方案,以进行链式分组并一起重新采样:
df1 = (df.reset_index(level=[0,1])
.groupby(['State', 'Location'])
.resample('W-SUN', closed='left', label='right')
.first())
print (df1)
State Location Str% Val% Vol%
State Location Date
NSW Country 2018-01-07 NSW Country 0.043152 0.052147 0.052867
2018-01-14 NaN NaN NaN NaN NaN
2018-01-21 NaN NaN NaN NaN NaN
2018-01-28 NaN NaN NaN NaN NaN
2018-02-04 NSW Country 0.043233 0.050797 0.050907
2018-02-11 NaN NaN NaN NaN NaN
2018-02-18 NaN NaN NaN NaN NaN
2018-02-25 NaN NaN NaN NaN NaN
2018-03-04 NSW Country 0.045113 0.052550 0.052213
2018-03-11 NaN NaN NaN NaN NaN
2018-03-18 NaN NaN NaN NaN NaN
2018-03-25 NaN NaN NaN NaN NaN
2018-04-01 NaN NaN NaN NaN NaN
2018-04-08 NSW Country 0.045113 0.052237 0.052195
2018-04-15 NaN NaN NaN NaN NaN
2018-04-22 NaN NaN NaN NaN NaN
2018-04-29 NaN NaN NaN NaN NaN
2018-05-06 NSW Country 0.045198 0.050020 0.049767
WA Metro 2019-09-08 WA Metro 0.028958 0.025970 0.027752
2019-09-15 NaN NaN NaN NaN NaN
2019-09-22 NaN NaN NaN NaN NaN
2019-09-29 NaN NaN NaN NaN NaN
2019-10-06 WA Metro 0.029070 0.025906 0.028062
2019-10-13 NaN NaN NaN NaN NaN
2019-10-20 NaN NaN NaN NaN NaN
2019-10-27 NaN NaN NaN NaN NaN
2019-11-03 WA Metro 0.029126 0.024388 0.026421
2019-11-10 NaN NaN NaN NaN NaN
2019-11-17 NaN NaN NaN NaN NaN
2019-11-24 NaN NaN NaN NaN NaN
2019-12-01 NaN NaN NaN NaN NaN
2019-12-08 WA Metro 0.029126 0.021167 0.023982
2019-12-15 NaN NaN NaN NaN NaN
2019-12-22 NaN NaN NaN NaN NaN
2019-12-29 NaN NaN NaN NaN NaN
2020-01-05 WA Metro 0.029412 0.027437 0.029197