Python 向数据帧添加缺少的时间窗口

Python 向数据帧添加缺少的时间窗口,python,pandas,dataframe,date,datetime,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 ..

我有以下数据帧

                      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
但是,我希望数据帧的日期在5分钟的窗口内始终在2013-02-04 8:00:00到2013-02-15 17:00:00之间丢失的窗口将始终具有“docets”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  

换言之,考虑到“真正的第一个数据包”是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)


现有数据记录是否始终与给定的时间间隔对齐,如您的示例所示?假设一个“扩展”记录集会有一个2013-02-04 15:55:00“空值”条目?我修正了一些输入错误。是的,数据总是与我想要的时间间隔对齐。好吧,我想你可能也引入了一点混乱-有一个2013-02-04 16:00:00的有效条目变为空?我认为这只是一个最好的编辑错误,如果您接受答案,您可以选择向上投票(单击向上箭头),并通过单击勾号接受预期答案。
                    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