规范化频率并将Dataframe中的多个TimeSeries扩展到给定日期

时间:2018-02-10 20:28:50

标签: python pandas dataframe time-series datetimeindex

timeseries每月有多个Dataframe

为了进行动态的虚拟化,我需要每月对它们进行重新取样,并为所有这些都提供相同的结束日期。

import pandas as pd

evolution = [{'date': '2017-09-01', 'Name': 'A', 'Value': 200},
         {'date': '2017-12-10', 'Name': 'A', 'Value': 400},
         {'date': '2017-09-01', 'Name': 'B', 'Value': 200},
         {'date': '2018-01-20', 'Name': 'B', 'Value': 600},
            ]
df = pd.DataFrame(evolution)
df

Out[57]: 
  Name  Value        date
0    A    200  2017-09-01
1    A    400  2017-12-10
2    B    200  2017-09-01
3    B    600  2018-01-20

我重新采样以获得标准化的索引/频率:

df.index = pd.DatetimeIndex(df['date'])
df = df.groupby(['Name']).resample('M').max()
df = df.drop(['date', 'Name'], axis=1)

df = df.interpolate(method='linear')
df

Out[58]: 
                      Value
Name date                  
A    2017-09-30  200.000000
     2017-10-31  266.666667
     2017-11-30  333.333333
     2017-12-31  400.000000
B    2017-09-30  200.000000
     2017-10-31  300.000000
     2017-11-30  400.000000
     2017-12-31  500.000000
     2018-01-31  600.000000

但是从这一点来看,我无法想象如何扩展A的DateTimeIndex来得到:

                     Value
Name date                  
A    2017-09-30  200.000000
     2017-10-31  266.666667
     2017-11-30  333.333333
     2017-12-31  400.000000
     2018-01-31  400.000000   <=== Extended Index
B    2017-09-30  200.000000
     ...
     2018-01-31  600.000000

1 个答案:

答案 0 :(得分:2)

我认为你需要:

print (df.unstack().ffill(axis=1).stack())
                      Value
Name date                  
A    2017-09-30  200.000000
     2017-10-31  266.666667
     2017-11-30  333.333333
     2017-12-31  400.000000
     2018-01-31  400.000000
B    2017-09-30  200.000000
     2017-10-31  300.000000
     2017-11-30  400.000000
     2017-12-31  500.000000
     2018-01-31  600.000000