使用新日期作为预测扩展多索引数据框

问题描述

注意:我已按照Stackoverflow的说明创建MRE并将MRE粘贴到“代码块”中(如将其粘贴到主体中,然后在突出显示时按Ctrl + K)。如果我仍然没有正确执行操作,请告诉我。

回到问题:假设我现在在日期(df ['DT'])和ID(df ['ID'])中都建立了df多索引

DT,ID,value1,value2
2020-10-01,a,1,1
2020-10-01,b,2,c,3,d,4,1
2020-10-02,10,11,12,13,1

df = df.set_index(['DT','ID'])

现在,我想将df扩展为具有与我的预测期相同的ID {a,b,c,d}的'2020-10-03'和'2020-10-04'。为了预测值1,我假设它们将取现有值的平均值,例如对于2020-10-03和2020-10-04中a的value1,我假设它将取(1 + 10)/ 2 = 5.5。对于值2,我假设它将保持恒定为1。

预期的df如下所示:

DT,1.0,2.0,3.0,4.0,10.0,11.0,12.0,13.0,1
2020-10-03,5.5,6.5,7.5,8.5,1
2020-10-04,1

感谢您的帮助和时间。

解决方法

为便于对DatetimeIndex使用平均DataFrame.unstack进行预测,请在DataFrame.reindex的基础上用date_range添加下一个日期时间,然后在value1级别用{ {3}},并为value2设置了1,最后一次重塑了DataFrame.fillna

print (df)
               value1  value2
DT         ID                
2020-10-01 a        1       1
           b        2       1
           c        3       1
           d        4       1
2020-10-02 a       10       1
           b       11       1
           c       12       1
           d       13       1

rng = pd.date_range('2020-10-01','2020-10-04',name='DT')
df1 = df.unstack().reindex(rng)
df1['value1'] = df1['value1'].fillna(df1['value1'].mean())
df1['value2'] = 1

df2 = df1.stack()

print (df2)
               value1  value2
DT         ID                
2020-10-01 a      1.0       1
           b      2.0       1
           c      3.0       1
           d      4.0       1
2020-10-02 a     10.0       1
           b     11.0       1
           c     12.0       1
           d     13.0       1
2020-10-03 a      5.5       1
           b      6.5       1
           c      7.5       1
           d      8.5       1
2020-10-04 a      5.5       1
           b      6.5       1
           c      7.5       1
           d      8.5       1

但是预测更为复杂,您可以检查DataFrame.stack