【问题标题】:Filling data in timeseries based on date interval根据日期间隔在时间序列中填充数据
【发布时间】:2018-11-28 12:21:22
【问题描述】:

我有这个数据框:

           ds  Value
0  2017-03-31   3395
1  2017-04-30   4510
3  2017-05-31   2335
5  2017-06-30   6061
6  2017-07-31   4711
7  2017-08-31   3039

我想定义一个日期间隔来用零填充其他行。

例如:

  • 间隔 = '2017-01-31' / '2017-10-31'

预期结果:

           ds  Value
0  2017-01-31   0
0  2017-02-28   0
0  2017-03-31   3395
1  2017-04-30   4510
3  2017-05-31   2335
5  2017-06-30   6061
6  2017-07-31   4711
7  2017-08-31   3039
8  2017-08-31   0
9  2017-08-31   0

我尝试使用以下内容:

 df.reindex(pd.period_range(2017-01, 2017-10, freq='M'), fill_value=0)

但我得到以下输出:

ds  Value
2017-01 1970-01-01      0
2017-02 1970-01-01      0
2017-03 1970-01-01      0
2017-04 1970-01-01      0
2017-05 1970-01-01      0
2017-06 1970-01-01      0
2017-07 1970-01-01      0
2017-08 1970-01-01      0
2017-09 1970-01-01      0
2017-10 1970-01-01      0
2017-11 1970-01-01      0
2017-12 1970-01-01      0
2018-01 1970-01-01      0
2018-02 1970-01-01      0
2018-03 1970-01-01      0
2018-04 1970-01-01      0
2018-05 1970-01-01      0
2018-06 1970-01-01      0
2018-07 1970-01-01      0

【问题讨论】:

    标签: python pandas time-series


    【解决方案1】:

    使用date_range 创建DatetimeIndex 和reindex:

    df = (df.set_index('ds')
            .reindex(pd.date_range('2017-01-31', '2017-10-31', freq='M'), fill_value=0))
    print (df)
                Value
    2017-01-31      0
    2017-02-28      0
    2017-03-31   3395
    2017-04-30   4510
    2017-05-31   2335
    2017-06-30   6061
    2017-07-31   4711
    2017-08-31   3039
    2017-09-30      0
    2017-10-31      0
    

    如果想要使用句点 - 将 DatetimeIndex to_period 和 reindex 转换为 period_range:

    df = (df.set_index('ds')
            .to_period('M')
            .reindex(pd.period_range('2017-01', '2017-10', freq='M'), fill_value=0))
    print (df)
             Value
    2017-01      0
    2017-02      0
    2017-03   3395
    2017-04   4510
    2017-05   2335
    2017-06   6061
    2017-07   4711
    2017-08   3039
    2017-09      0
    2017-10      0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 2018-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-09
      • 2014-01-16
      相关资源
      最近更新 更多