【问题标题】:Adding weeks with 0 value to a pandas dataframe with time series data for weeks when data wasn't captured在未捕获数据的情况下,将具有 0 值的周添加到具有时间序列数据的 pandas 数据帧中的周
【发布时间】:2020-02-07 06:56:01
【问题描述】:

我有按周分组的交易数据。但是,我不能保证每周都有数据。 Group by 在第一周和最后一周之间以 0 数量填充缺失的周方面做得很好。但是,我需要用截至本周的值填充我的数据框。

我的数据存储在日期框架 dfShipsInScope 中,我已使用以下代码将我的数据转换为每周一次:

dfShipsInScope['START_TIME'] = pd.to_datetime(dfShipsInScope['START_TIME'])
dfShipsInScope=dfShipsInScope[['START_TIME','X']].groupby('START_TIME').sum()
dfShipsInScope=dfShipsInScope.resample(rule = 'W-SAT').sum()
dfShipsInScope.index.freq='W-SAT'

这会输出如下内容:

            X
START_TIME  
2019-09-14  3.000
2019-09-21  0.000
2019-09-28  1.500

我需要添加 2019 年 10 月 5 日和 2019 年 10 月 12 日的周,其中 X=0,以便数据框反映到今天为止的周数。在某些情况下,我需要添加几个星期的零,所以我正在寻找一个有效的解决方案。有人知道这样做的好方法吗?

【问题讨论】:

  • 仅仅两周时间有什么押韵或理由吗?
  • 我在很多不同的数据集上运行它。在此特定示例中,最后一个日期点是两周前。在其他情况下,肯定会有所不同。

标签: python pandas dataframe time-series pandas-groupby


【解决方案1】:

您可以使用 pd.date_range 重新索引您的输出

在:

df.reindex(
    pd.date_range(start=df.index.min(),
                  end=pd.to_datetime('today') + pd.offsets.Week(),
                  freq='W-SAT')).fillna(0)

输出:

|            | X   |
|------------|-----|
| 2019-09-14 | 3.0 |
| 2019-09-21 | 0.0 |
| 2019-09-28 | 1.5 |
| 2019-10-05 | 0.0 |
| 2019-10-12 | 0.0 |

【讨论】:

    猜你喜欢
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 2021-01-09
    • 2022-01-03
    • 1970-01-01
    相关资源
    最近更新 更多