将缺失的时间窗口添加到 Pandas 数据框

时间:2021-04-25 22:35:00

标签: python pandas dataframe date datetime

我有以下数据框

                      doctets  Duration
Real First Packet                      
2013-02-04 15:45:00       456        64
2013-02-04 15:50:00    282111     56576
2013-02-04 16:00:00    271426    173632
2013-02-04 16:05:00         0         0
...                       ...       ...
2013-02-15 16:20:00         0         0
2013-02-15 16:25:00         0         0
2013-02-15 16:30:00     47255      6656

但是,我希望我的数据框的日期始终在 2013-02-04 8:00:00 到 2013-02-15 17:00:00 的 5 分钟窗口内。 丢失的窗口将始终具有 'doctets' 0 和 'Duration' 0。

我想要的输出看起来像这样:

                      doctets  Duration
Real First Packet
2013-02-04 8:00:00          0         0
2013-02-04 8:05:00          0         0
...                       ...       ...                      
2013-02-04 15:45:00       456        64
2013-02-04 15:50:00    282111     56576
2013-02-04 15:55:00    271426    173632
2013-02-04 16:00:00         0         0
...                       ...       ...
2013-02-15 16:20:00         0         0
2013-02-15 16:25:00         0         0
2013-02-15 16:30:00     47255      6656
...                       ...       ...
2013-02-15 16:55:00         0         0
2013-02-15 17:00:00         0         0  

换句话说,我想用所需日期范围内的缺失日期填充数据框

1 个答案:

答案 0 :(得分:0)

查看您的输入,考虑到 'Real First Packet' 是 df 中类型为 'datetime64[ns]' 的索引。

两种解决方案

解决方案 1 将现有 df 重新采样为 5 分钟频率,然后在开始和结束时间之间使用 5 分钟频率重新索引 df。

df = df.resample('5min').asfreq().reindex(pd.date_range('2013-02-04 8:00:00', '2013-02-15 17:00:00', freq='5 min')).fillna(0).astype(int)

解决方案 2

以 5 分钟的频率重新采样现有的 df。

df = df.resample('5min').asfreq()

为所需的日期范围创建新的 df 并将其与现有的 df 合并。

df = df.merge(
    pd.date_range(start='2013-02-04 8:00:00',
                  end='2013-02-15 17:00:00',
                  freq='5min',name='Real First Packet').to_frame()\
    .set_index('Real First Packet'),
    left_index=True,
    right_index=True,
    how='right'
 ).fillna(0).astype(int)

最后 7 行的样本输出,即 df.tail(7)

                    doctets Duration
RealFirstPacket     
2013-02-15 16:30:00 47255   6656
2013-02-15 16:35:00 0   0
2013-02-15 16:40:00 0   0
2013-02-15 16:45:00 0   0
2013-02-15 16:50:00 0   0
2013-02-15 16:55:00 0   0
2013-02-15 17:00:00 0   0