我有几年前的每日数据。如果我首先想看看这些月平均数是多少,那么要计划出未来几年的月平均数预测,我编写了以下代码。
例如,我对下一个1月的预测将是最近1月的平均值,而对2月,3月等的预测也将相同。在过去的几年中,我的1月数字是51.8111,因此对于我的预测中的1月我希望每年一月的每一天都是这个51.8111的数字(即,将每月粒度改为每日粒度)。
我的问题是,我的代码似乎有些冗长,并且带有循环,可能会有点慢吗?对于我自己的学习,我想知道,有什么更好的方法来获取每日数据,将其平均为一个时间段,然后规划该时间段?我当时在查看地图并在Pandas中应用函数,但无法完全解决。
import datetime as dt
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
np.random.seed(0)
# create random dataframe of daily values
df = pd.DataFrame(np.random.randint(low=0, high=100,size=2317),
columns=['value'],
index=pd.date_range(start='2014-01-01', end=dt.date.today()-dt.timedelta(days=1), freq='D'))
# gain average by month over entire date range
df_by_month = df.groupby(df.index.month).mean()
# create new dataframe with date range for forecast
df_forecast = pd.DataFrame(index=pd.date_range(start=dt.date.today(), periods=1095, freq='D'))
df_forecast['value'] = 0
# project forward the monthly average to each day
for val in df_forecast.index:
df_forecast.loc[val]['value'] = df_by_month.loc[val.month]
# create new dataframe joining together the historical value and forecast
df_complete = df.append(df_forecast)
答案 0 :(得分:0)
我认为您需要value
中的df_by_month
列中的Index.map
,按月排列:
# create new dataframe with date range for forecast
df_forecast = pd.DataFrame(index=pd.date_range(start=dt.date.today(), periods=1095, freq='D'))
df_forecast['value'] = df_forecast.index.month.map(df_by_month['value'])