将数据分组的时间段 Python

Time Buckets to group the data in Python

我想有一定的时间段,然后找出每个时间段的差异来分析。

例如,

import pandas as pd
import numpy as np
df = pd.DataFrame({'A': 'A-1 A-1 A-1 A-1 A-1 A-1'.split(),
                   'Date':'23.10.2021 23.10.2021 23.10.2021 23.10.2021 23.10.2021 23.10.2021'.split(),
                   'Time': '06:05:31 06:11:13 06:19:22 06:25:03 06:33:12 06:44:05'.split(),
                   'Cumulative': '12 17 19 23 29 38'.split()})
print(df)

输出:

     A        Date      Time Cumulative
0  A-1  23.10.2021  06:05:31         12
1  A-1  23.10.2021  06:11:13         17
2  A-1  23.10.2021  06:19:22         19
3  A-1  23.10.2021  06:25:03         23
4  A-1  23.10.2021  06:33:12         29
5  A-1  23.10.2021  06:44:05         38

我想要的是以 15 分钟为间隔的时间上限,并找出每个时间的差异, 第一步:

     A        Date      Time Cumulative      TimeBuckets
0  A-1  23.10.2021  06:05:31         12         06:15:00 
1  A-1  23.10.2021  06:11:13         17         06:15:00 
2  A-1  23.10.2021  06:19:22         19         06:30:00 
3  A-1  23.10.2021  06:25:03         23         06:30:00 
4  A-1  23.10.2021  06:33:12         29         06:45:00 
5  A-1  23.10.2021  06:44:05         38         06:45:00 

并且在最后阶段作为不同的数据帧,将写入每个时间桶的每个最小值和最大值的差异:

     A         Diff   TimeBuckets
0  A-1            5      06:15:00  
1  A-1            4      06:30:00    
2  A-1            8      06:45:00

IIUC,你可以使用 dt.ceil and GroupBy.agg:

(df.assign(Cumulative=df['Cumulative'].astype(int),
           TimeBuckets=pd.to_datetime(df['Time']).dt.ceil('15min').dt.time
          )
   .groupby('TimeBuckets', as_index=False)
   .agg({'A': 'first', 'Cumulative': lambda x: x.max()-x.min()})
)

输出:

  TimeBuckets    A  Cumulative
0    06:15:00  A-1           5
1    06:30:00  A-1           4
2    06:45:00  A-1           9