使用Python熊猫根据月平均值生成每日预测

时间:2020-05-06 11:07:50

标签: python pandas

我有几年前的每日数据。如果我首先想看看这些月平均数是多少,那么要计划出未来几年的月平均数预测,我编写了以下代码。

例如,我对下一个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)

1 个答案:

答案 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'])