首页 > 解决方案 > 具有按日期时间范围排序的列的 Pandas Dataframe 数据透视表

问题描述

我需要制作一个数据透视表,其中的列是日期时间范围。也许我的问题措辞不佳,所以我找不到我需要的答案。

例如说我有数据框:

start_time             end_time               duration_hours    error
2020-05-08 20:04:00    2020-05-08 22:04:00    2                 1
2020-05-09 07:22:00    2020-05-09 08:52:00    1.5               1
2020-05-09 13:20:00    2020-05-09 15:20:00    3                 1
2020-05-08 11:45:00    2020-05-08 15:45:00    4                 2
2020-05-08 18:30:00    2020-05-08 19:00:00    0.5               3
2020-05-09 18:15:00    2020-05-09 20:45:00    2.5               3

我希望结果是:

         timeframe
error    2020-05-08 06:00 ~ 2020-05-08 18:00    2020-05-08 18:00 ~ 2020-05-09 06:00    2020-05-09 06:00 ~ 2020-05-09 18:00    2020-05-09 18:00 ~ 2020-05-10 06:00
1        0                                      2                                      4.5                                    0
2        4                                      0                                      0                                      0
3        0                                      0.5                                    0                                      2.5

基本上,我希望将错误作为索引,并按每天早上 6 点至下午 6 点和下午 6 点至早上 6 点的交替时段组织列。表中数据应为该期间内持续时间的总和。可以假设 start_time 和 end_time 都在同一时期内。

我一直试图弄清楚如何通过交替的时间段来组织列,但失败了。该表需要可扩展,因此我也无法对其进行硬编码。任何帮助表示赞赏!

标签: pythonpandasdatetimepivot-table

解决方案


您可能不一定需要添加范围,因为根据下一列的值似乎很清楚。我会用error和分组pd.Grouper。然后,从那里创建一个数据透视表。

df1 = df.groupby(['error', pd.Grouper(key='start_time', freq='12H', base=6)])['duration_hours'].sum().reset_index().pivot_table(index='error', columns='start_time', values='duration_hours').fillna(0)

df1

start_time  2020-05-08 06:00:00  2020-05-08 18:00:00    2020-05-09 06:00:00  2020-05-09 18:00:00
error               
1           0.0                  2.0                    4.5                  0.0
2           4.0                  0.0                    0.0                  0.0
3           0.0                  0.5                    0.0                  2.5

推荐阅读