问题描述
注意:我已按照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