简化示例
dates = ['2018-8-20','2018-8-27','2018-9-10']
values = [1,2,3]
df = pd.Series(values, index=pd.to_datetime(dates))
df.index.name = 'week'
df.name = 'val'
变成每日(注意,我正在向前填充空值):
date_list = [df.index.min() + datetime.timedelta(days=x) for x in range(0, (df.index.max()-df.index.min()).days+1)]
dfDaily = df.reindex(date_list)
dfDaily= dfDaily.fillna(method='ffill')
dfDaily = pd.DataFrame(dfDaily)
dfDaily['month'] = dfDaily.index.month
dfDaily['year'] = dfDaily.index.year
它给出:
val month year
week
2018-08-20 1.0 8 2018
2018-08-21 1.0 8 2018
2018-08-22 1.0 8 2018
2018-08-23 1.0 8 2018
2018-08-24 1.0 8 2018
2018-08-25 1.0 8 2018
2018-08-26 1.0 8 2018
2018-08-27 2.0 8 2018
2018-08-28 2.0 8 2018
2018-08-29 2.0 8 2018
2018-08-30 2.0 8 2018
2018-08-31 2.0 8 2018
2018-09-01 2.0 9 2018
2018-09-02 2.0 9 2018
2018-09-03 2.0 9 2018
2018-09-04 2.0 9 2018
2018-09-05 2.0 9 2018
2018-09-06 2.0 9 2018
2018-09-07 2.0 9 2018
2018-09-08 2.0 9 2018
2018-09-09 2.0 9 2018
2018-09-10 3.0 9 2018
每月汇总:
dfMonthly = dfDaily.groupby(['year', 'month']).val.mean().reset_index()
产生所需的数据帧:;
year month val
0 2018 8 1.416667
1 2018 9 2.100000