Python 使用按日期时间范围排序的列创建Dataframe数据透视表

Python 使用按日期时间范围排序的列创建Dataframe数据透视表,python,pandas,datetime,pivot-table,Python,Pandas,Datetime,Pivot Table,我需要制作一个透视表,其中列是日期时间范围。也许我的问题措词不当,所以找不到我需要的答案 例如,假设我有数据帧: 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

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

例如,假设我有数据帧:

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点的交替时段组织列。表中的数据应为该期间内持续时间的总和。可以假设开始时间和结束时间都在同一时间段内


我一直在想如何通过交替的句点来组织专栏,但失败了。这个表需要可伸缩,所以我也不能硬编码它。感谢您的帮助

您可能不一定需要添加范围,因为根据下一列的值似乎很清楚。我会用
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


您可能不一定需要添加范围,因为根据下一列的值似乎很清楚。我会用
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


请提供a,以及当前和预期输出。@PoHuang我是否回答了您的问题。您能通过单击复选标记接受答案吗?请提供a,以及当前和预期的输出。@PoHuang我是否回答了您的问题。你能通过点击复选标记接受答案吗?