gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 07:51:18 24 4
gpt4 key购买 nike

我有一个数据框,如下

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 的最小值和最大值,将它们传递到列表,然后手动创建开始和结束时间,但速度很慢,而且困惑且容易出错...希望这里有人可以指导我缺少什么。

最佳答案

groupbyagg结合使用

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

关于python - 将多个时间值分组为开始时间和结束时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56203812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com