Python 将多个时间值分组为开始时间和结束时间

Python 将多个时间值分组为开始时间和结束时间,python,pandas,datetime,Python,Pandas,Datetime,我有一个如下的数据帧 import pandas as pd import numpy as np IDs = ['A','A','A','B','B'] times = pd.date_range(start='01/01/2019',end='01/02/2019',freq='h') times_2 = pd.date_range(start='01/01/2019',end='01/02/2019',freq='h') + pd.Timedelta('15min') Vals = [n

我有一个如下的数据帧

import pandas as pd
import numpy as np
IDs = ['A','A','A','B','B']
times = pd.date_range(start='01/01/2019',end='01/02/2019',freq='h')
times_2 = pd.date_range(start='01/01/2019',end='01/02/2019',freq='h') + pd.Timedelta('15min')

Vals = [np.random.randint(15,250) for x in enumerate(times)]
df = pd.DataFrame({'id' : IDs*5,
             'Start' : times,
             'End' : times_2,
            'Value' : Vals},columns=['id','Start','End','Value'])
这给了我一个df,如下所示

print(df.head(5))
        id  Start   End Value
0   A   2019-01-01 00:00:00 2019-01-01 00:15:00 52
1   A   2019-01-01 01:00:00 2019-01-01 01:15:00 69
2   A   2019-01-01 02:00:00 2019-01-01 02:15:00 209
3   B   2019-01-01 03:00:00 2019-01-01 03:15:00 163
4   B   2019-01-01 04:00:00 2019-01-01 04:15:00 70
现在我要做的是对我的数据帧应用
group by
,以获得值列的总和,但是,在这样做的同时,我希望保留df的最小开始时间和最大结束时间

因此,我的示例输出如下:

  id    Start   End Value
0   A   2019-01-01 00:00:00 2019-01-01 22:15:00 2007
1   B   2019-01-01 03:00:00 2019-01-02 00:15:00 1385

我完成这项工作的唯一方法是按开始时间和结束时间传递每个唯一ID的最小值和最大值,将它们传递到列表,然后手动创建开始时间和结束时间,但这很慢,很混乱,而且容易出错。。。希望这里有人能告诉我我错过了什么

使用
groupby
agg

df.groupby('id').agg({'Start':'min','End':'max','Value':'sum'})#reset_index()
Out[92]: 
                 Start                 End  Value
id                                               
A  2019-01-01 00:00:00 2019-01-01 22:15:00   2152
B  2019-01-01 03:00:00 2019-01-02 00:15:00    972

一如既往地感谢温先生!格林会在8点后打勾吗mins@Datanovice快乐编码:-)