我有因子和时间间隔表。我想做的是获取长表,每个日期的间隔在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


我怎样才能做到这一点?

最佳答案

您可以使用melt进行重塑,然后使用groupbyresample填充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中的新增功能。

关于python - Pandas 重塑日期序列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38895121/

10-16 18:58