如何使用字符串给出的熊猫计算事件的持续时间?



在找到以下有关使用 Pandas 计算时差的链接后,我仍然试图将这些知识与我自己的数据相适应。我的数据集如下所示:

In [10]: df 
Out[10]:
id           time
0  420 1/3/2018 8:32
1  420 1/3/2018 8:36
2  420 1/3/2018 8:42
3  425 1/7/2018 12:35
4  425 1/7/2018 14:29
5  425 1/7/2018 16:15
6  425 1/7/2018 16:36
7  427 1/11/2018 20:50
8  428 1/13/2018 16:35
9  428 1/13/2018 17:36

我想对输出为:

In [11]: pd.groupby(df[id])
Out [11]:
id   time (duration)
0  420  0:10
1  425  4:01
2  427  0:00
3  428  1:01

id 和 time 的类型分别为 int64 和 object。使用 python3 和 pandas 0.20。

编辑: 来自 SQL,这似乎在功能上等效于:

select id, max(time) - min(time)
from df
group by id

编辑 2: 谢谢大家的快速回复。所有解决方案都给了我以下错误的某些版本。不确定与我在这里缺少的特定数据集相关的内容:

TypeError: unsupported operand type(s) for -: 'str' and 'str'

groupbywithnp.ptp

df.groupby('id').time.apply(np.ptp)
id
420   00:10:00
425   04:01:00
427   00:00:00
428   01:01:00
Name: time, dtype: timedelta64[ns]

按事件 ID 对数据帧进行分组,并选择最小和最大时间:

df1 = df.groupby('id').agg([max, min])

找出差异:

(df1[('time','max')] - df1[('time','min')]).reset_index()
#    id          0
#0  420   00:10:00
#1  425   04:01:00
#2  427   00:00:00
#3  428   01:01:00

您需要按time对数据帧进行排序,并按id分组,然后才能获得每个组中time之间的差异。

df['time'] = pd.to_datetime(df['time'])
df.sort_values(by='time').groupby('id')['time'].apply(lambda g: g.max() - g.min()).reset_index(name='duration')

输出:

id duration
0   420 00:10:00
1   425 04:01:00
2   427 00:00:00
3   428 01:01:00

最新更新