【问题标题】:pandas reshape date sequence熊猫重塑日期序列
【发布时间】:2016-08-11 11:28:24
【问题描述】:

我有一个包含因子和时间间隔的表格。我想要做的是在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

我该怎么做?

【问题讨论】:

    标签: python datetime pandas reshape melt


    【解决方案1】:

    您可以使用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 中的新功能。

    【讨论】:

    • 太棒了!谢谢
    猜你喜欢
    • 2016-03-21
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 2013-05-14
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多