我有一张如下表格
id time
1 2017-11-01 2:00:00
1 2017-11-01 2:00:20
1 2017-11-01 2:00:40
1 2017-11-01 2:01:00
.
.
.
123 2017-12-21 11:59:59
我想查找每天每个ID的总时间。在R / Python中执行此操作的有效方法是什么?
理想情况下可以使用
id date minutes
1 2017-11-01 25
1 2017-11-01 22
.
.
我不想使用嵌套的for循环来做这件事。有没有更好的方法呢?
我在考虑使用下面的申请,使用每个ID的DF列表
lapply(names(myDF), function(x) {aggregateTime())
答案 0 :(得分:0)
在python中,您可以使用groupby.first
和groupby.last
之类的内容:
groupby = ('id', pd.Grouper(key='time', freq='d'))
begin = df.groupby(groupby ).first().astype('datetime64[ns]')
end = df.groupby(groupby ).last().astype('datetime64[ns]')
diff = (end - begin)['time']
diff = ((end - begin)['time'] / pd.Timedelta('1M')).round() # if you want it in minutes
diff
可以是Series
Timedelta
或一系列小吃,具体取决于您的需求
def time_diff(group):
diff = group['time'].max()- group['time'].min()
return round(diff / pd.Timedelta('1M'))
df.groupby(groupby).apply(time_diff)