首页 > 解决方案 > 插值时间序列并重新采样/旋转。如何获得预期的输出

问题描述

我有一个看起来像这样的df:

Video | Start              | End                | Duration |  
vid1  |2018-10-02 16:00:29 |2018-10-02 20:07:05 |   246    |  
vid2  |2018-10-04 16:03:08 |2018-10-04 16:10:11 |     7    |  
vid3  |2018-10-04 10:13:40 |2018-10-06 12:07:38 |   113    |  

我想要做的是按开始列将数据帧重新采样 10 分钟,如果视频在该时间戳中持续,则分配 1,否则分配 0。所需的输出是:

Start              | vid1 | vid2 | vid3 |
2018-10-02 16:00:00|  1   |  0   | 0    |  
2018-10-02 16:10:00|  1   |  0   | 0    |
... 
2018-10-04 16:10:00|  0   |  1   | 0    |  
2018-10-04 16:20:00|  0   |  0   | 1    |  

输出仅用于可视化输出,因此,它可能包含错误。
问题是我无法以某种方式重新采样数据帧以生成所需的交叉表输出。

标签: pythonpandas

解决方案


尝试这个:

df.apply(lambda x: pd.Series(x['Video'], 
                             index=pd.date_range(x['Start'].floor('10T'), 
                                                 x['End'].ceil('10T'), 
                                                 freq='10T')), axis=1)\
  .stack().str.get_dummies().reset_index(level=0, drop=True)

输出:

                     vid1   vid2   vid3 
2018-10-02 16:00:00      1      0      0
2018-10-02 16:10:00      1      0      0
2018-10-02 16:20:00      1      0      0
2018-10-02 16:30:00      1      0      0
2018-10-02 16:40:00      1      0      0
...                    ...    ...    ...
2018-10-06 11:30:00      0      0      1
2018-10-06 11:40:00      0      0      1
2018-10-06 11:50:00      0      0      1
2018-10-06 12:00:00      0      0      1
2018-10-06 12:10:00      0      0      1

[330 rows x 3 columns]

推荐阅读