2016-08-11 18 views
1

私は因子と時間間隔のあるテーブルを持っています。私がしたいのは、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 

私はこの1つのような出力テーブルを持つようにしたい:

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 

私はこれをどのように行うことができますか?

答えて

2

あなたはdatesを埋めるためresampleで再形成し、その後groupbyためmeltを使用することができます。

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 

お知らせ:

このfuncionalityはpandas 0.18.1で新しく追加されました。

+0

優秀!ありがとうございます – BiXiC

+0

受け入れていただきありがとうございます。がんばろう! – jezrael