2017-12-04 7 views
0

私は一日あたりのIDあたりの合計時間を見つけたいロールアップIDと時系列 - 効率的な方法

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 

以下のように、私はテーブルを持っています。 R/Pythonでこれを行う有効な方法は何ですか?

理想的には、私はループのネストされたを使用してこれを行うにはしたくない

id date minutes 
1 2017-11-01 25 
1 2017-11-01 22 
. 
. 

のようなものを取得します。それ以上の方法はありますか?

私はあなたのようなものでgroupby.firstgroupby.lastを使用することができます

Pythonで
lapply(names(myDF), function(x) {aggregateTime()) 

答えて

0

IDごとのDFのリストを使用して以下のように適用されます使用して考えていた:Seriesすることができ

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 

diffTimedeltaまたはあなたが望むものに応じて一連のminuts

バリエーション

def time_diff(group): 
    diff = group['time'].max()- group['time'].min() 
    return round(diff/pd.Timedelta('1M')) 
df.groupby(groupby).apply(time_diff)