使用新日期作为预测扩展多索引数据框
Expanding multi-indexed dataframe with new dates as forecast
注意:我已经按照 Whosebug 的说明如何创建 MRE 并将 MRE 粘贴到 'code block' 中(即将其粘贴到 Body 中,然后在突出显示时按 Ctrl+K)。如果我仍然做错了,请告诉我。
回到问题:假设我现在在日期 (df['DT']) 和 ID (df['ID'])
中都有一个 df 多索引
DT,ID,value1,value2
2020-10-01,a,1,1
2020-10-01,b,2,1
2020-10-01,c,3,1
2020-10-01,d,4,1
2020-10-02,a,10,1
2020-10-02,b,11,1
2020-10-02,c,12,1
2020-10-02,d,13,1
df = df.set_index(['DT','ID'])
现在,我想扩展 df 以将“2020-10-03”和“2020-10-04”与我的预测期使用同一组 ID {a,b,c,d} .为了预测值 1,我假设他们将取现有值的平均值,例如对于 a 在 2020-10-03' 和 '2020-10-04' 中的值 1,我假设它将采用 (1+10)/2 = 5.5。对于值 2,我假设它将保持不变为 1。
预期的 df 将如下所示:
DT,ID,value1,value2
2020-10-01,a,1.0,1
2020-10-01,b,2.0,1
2020-10-01,c,3.0,1
2020-10-01,d,4.0,1
2020-10-02,a,10.0,1
2020-10-02,b,11.0,1
2020-10-02,c,12.0,1
2020-10-02,d,13.0,1
2020-10-03,a,5.5,1
2020-10-03,b,6.5,1
2020-10-03,c,7.5,1
2020-10-03,d,8.5,1
2020-10-04,a,5.5,1
2020-10-04,b,6.5,1
2020-10-04,c,7.5,1
2020-10-04,d,8.5,1
感谢您的帮助和时间。
平均使用方便预测DataFrame.unstack
for DatetimeIndex
, add next datetimes by DataFrame.reindex
with date_range
and then replace missing values in value1
level by DataFrame.fillna
and for value2
is set 1
, last reshape back by DataFrame.stack
:
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
但是预测比较复杂,可以查看this
注意:我已经按照 Whosebug 的说明如何创建 MRE 并将 MRE 粘贴到 'code block' 中(即将其粘贴到 Body 中,然后在突出显示时按 Ctrl+K)。如果我仍然做错了,请告诉我。
回到问题:假设我现在在日期 (df['DT']) 和 ID (df['ID'])
中都有一个 df 多索引DT,ID,value1,value2
2020-10-01,a,1,1
2020-10-01,b,2,1
2020-10-01,c,3,1
2020-10-01,d,4,1
2020-10-02,a,10,1
2020-10-02,b,11,1
2020-10-02,c,12,1
2020-10-02,d,13,1
df = df.set_index(['DT','ID'])
现在,我想扩展 df 以将“2020-10-03”和“2020-10-04”与我的预测期使用同一组 ID {a,b,c,d} .为了预测值 1,我假设他们将取现有值的平均值,例如对于 a 在 2020-10-03' 和 '2020-10-04' 中的值 1,我假设它将采用 (1+10)/2 = 5.5。对于值 2,我假设它将保持不变为 1。
预期的 df 将如下所示:
DT,ID,value1,value2
2020-10-01,a,1.0,1
2020-10-01,b,2.0,1
2020-10-01,c,3.0,1
2020-10-01,d,4.0,1
2020-10-02,a,10.0,1
2020-10-02,b,11.0,1
2020-10-02,c,12.0,1
2020-10-02,d,13.0,1
2020-10-03,a,5.5,1
2020-10-03,b,6.5,1
2020-10-03,c,7.5,1
2020-10-03,d,8.5,1
2020-10-04,a,5.5,1
2020-10-04,b,6.5,1
2020-10-04,c,7.5,1
2020-10-04,d,8.5,1
感谢您的帮助和时间。
平均使用方便预测DataFrame.unstack
for DatetimeIndex
, add next datetimes by DataFrame.reindex
with date_range
and then replace missing values in value1
level by DataFrame.fillna
and for value2
is set 1
, last reshape back by DataFrame.stack
:
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
但是预测比较复杂,可以查看this