大熊猫重塑日期序列

时间:2016-08-11 11:28:24

标签: python datetime pandas reshape melt

我有因子和时间间隔的表格。我想要做的是在START_DATEEND_DATE之间的间隔中获取每个日期的长表。

dt_in = pd.DataFrame({'factor':['A','B'],
          'START_DATE':[pd.Timestamp('2015-01-01'),pd.Timestamp('2016-02-05')],
          'END_DATE':[pd.Timestamp('2015-01-04'),pd.Timestamp('2016-02-07')]})

    END_DATE    START_DATE  factor
0   2015-01-04  2015-01-01  A
1   2016-02-07  2016-02-05  B

我想要像这样的输出表:

dt_out = pd.DataFrame({'factor': ['A','A','A','A','B','B','B'],
                   'DATE': ['2015-01-01', '2015-01-02', '2015-01-03', '2015-01-04',
                            '2016-02-05', '2016-02-06', '2016-02-07']})
    DATE    factor
0   2015-01-01  A
1   2015-01-02  A
2   2015-01-03  A
3   2015-01-04  A
4   2016-02-05  B
5   2016-02-06  B
6   2016-02-07  B

我该怎么做?

1 个答案:

答案 0 :(得分:2)

您可以使用melt进行重塑,然后groupby使用resample填充dates

df = pd.melt(dt_in, id_vars='factor', value_name='DATE')
       .set_index('DATE')
       .drop('variable',axis=1)

print (df)
           factor
DATE             
2015-01-04      A
2016-02-07      B
2015-01-01      A
2016-02-05      B

print (df.groupby('factor')
         .resample('1D')
         .ffill()
         .reset_index(drop=True, level=0)
         .reset_index())

        DATE factor
0 2015-01-01      A
1 2015-01-02      A
2 2015-01-03      A
3 2015-01-04      A
4 2016-02-05      B
5 2016-02-06      B
6 2016-02-07      B

注意:

此功能在pandas 0.18.1中是新的。