Pandas DataFrame группируется по двум столбцам и получает первый и последний

У меня есть DataFrame .

 df = pd.DataFrame({'id' : [1,1,2,3,2], 'value' : ["a","b","a","a","c"], 'Time' : ['6/Nov/2012 23:59:59 -0600','6/Nov/2012 00:00:05 -0600','7/Nov/2012 00:00:09 -0600','27/Nov/2012 00:00:13 -0600','27/Nov/2012 00:00:17 -0600']}) 

Мне нужно получить выход, как показано ниже.

 combined_id | enter time | exit time | time difference 

mixed_id должен быть создан путем группировки 'id' и 'value'

 g = df.groupby(['id', 'value']) 

Следующий не работает с группировкой по двум столбцам. (Как использовать first() и last() здесь как время ввода и выхода?)

 df['enter'] = g.apply(lambda x: x.first()) 

Чтобы получить разницу, следует ли работать?

 df['delta'] = (df['exit']-df['enter'].shift()).fillna(0) 

Сначала убедитесь, что столбец является правильным столбцом datetime:

 In [11]: df['Time'] = pd.to_datetime(df['Time']) 

Теперь вы можете сделать groupby и использовать agg с помощью first и last методов groupby:

 In [12]: g = df.groupby(['id', 'value']) In [13]: res = g['Time'].agg({'first': 'first', 'last': 'last'}) In [14]: res = g['Time'].agg({'enter': 'first', 'exit': 'last'}) In [15]: res['time_diff'] = res['exit'] - res['enter'] In [16]: res Out[16]: exit enter time_diff id value 1 a 2012-11-06 23:59:59 2012-11-06 23:59:59 0 days b 2012-11-06 00:00:05 2012-11-06 00:00:05 0 days 2 a 2012-11-07 00:00:09 2012-11-07 00:00:09 0 days c 2012-11-27 00:00:17 2012-11-27 00:00:17 0 days 3 a 2012-11-27 00:00:13 2012-11-27 00:00:13 0 days 

Примечание: это немного скучный пример, поскольку в каждой группе есть только один элемент …