在找到关于calculating time differences using 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
我想在ID上执行groupby或其他函数,其输出为:
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'
答案 0 :(得分:2)
groupby
与np.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]
答案 1 :(得分:1)
按事件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
答案 2 :(得分:0)
您需要按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