Я полагаю, что пример ввода и вывода даст лучшее объяснение.
Но на словах - у меня есть данные, которые я хочу сгруппировать по пользователю и кластеру, а также извлечь минимальную и максимальную временную метку в группу и посчитатьколичество значений.
user2.groupby('cluser')['time'].agg(['max', 'min']).reset_index()
Легко. нетривиальная часть состоит в том, что кластер ключей моей группы, если он повторяется после его изменения, я хочу считать его новой группой..
Я пытался «пометить», когда произошло это изменение (сдвинуть столбец кластера и проверить, отличается ли он, и поставить «маркерный столбец» с 1 или 0 ...), но все еще не знаю, как действовать дальше.
data = [[39, 116, 492L, '2008-10-23 12:45:24', '002', 1],
[39., 116., 673L, '2008-10-23 12:53:22', '002', 1],
[39., 116., 129L, '2008-10-23 13:01:17', '002', 2],
[39., 116., 905L, '2008-10-23 13:16:25','002', 2],
[39., 116., 541L, '2008-10-23 13:28:30','002', 2],
[39., 116., 233L, '2008-10-23 13:41:33','002', 1],
[39., 116., 0L, '2008-10-23 13:55:02', '002',1],
[39., 116., 333L, '2008-10-23 14:08:35','002', 3],
[39., 116., 229L, '2008-10-23 14:22:06', '002', 3],
[39., 116., 225L, '2008-10-23 14:33:10','002', 1],
[39., 116., 190L, '2008-10-23 14:50:58', '002', 2],
[39., 116., 232L, '2008-10-23 14:58:23','002', 2],
[39., 116., 540L, '2008-10-23 15:25:14','002', 2]]
pd.DataFrame(data, columns=['lat', 'lon', 'alt','datetime','user', 'cluster'])
lat lon alt datetime user cluster
0 39.0 116.0 492 2008-10-23 12:45:24 002 1
1 39.0 116.0 673 2008-10-23 12:53:22 002 1
2 39.0 116.0 129 2008-10-23 13:01:17 002 2
3 39.0 116.0 905 2008-10-23 13:16:25 002 2
4 39.0 116.0 541 2008-10-23 13:28:30 002 2
5 39.0 116.0 233 2008-10-23 13:41:33 002 1
6 39.0 116.0 0 2008-10-23 13:55:02 002 1
7 39.0 116.0 333 2008-10-23 14:08:35 002 3
8 39.0 116.0 229 2008-10-23 14:22:06 002 3
9 39.0 116.0 225 2008-10-23 14:33:10 002 1
10 39.0 116.0 190 2008-10-23 14:50:58 002 2
11 39.0 116.0 232 2008-10-23 14:58:23 002 2
12 39.0 116.0 540 2008-10-23 15:25:14 002 2
output = [['002', 1, '2008-10-23 12:45:24', '2008-10-23 12:53:22',2],
['002', 2, '2008-10-23 13:01:17', '2008-10-23 13:28:30',3],
['002', 1, '2008-10-23 13:41:33', '2008-10-23 13:55:02',2],
['002', 3, '2008-10-23 14:08:35', '2008-10-23 14:22:06',2],
['002', 1, '2008-10-23 14:33:10', '2008-10-23 14:33:10',1],
['002', 2, '2008-10-23 14:50:58', '2008-10-23 15:25:14',3]]
pd.DataFrame(output, columns=['user', 'cluster', 'min time','max time', '# num items'])
user cluster min time max time # num items
0 002 1 2008-10-23 12:45:24 2008-10-23 12:53:22 2
1 002 2 2008-10-23 13:01:17 2008-10-23 13:28:30 3
2 002 1 2008-10-23 13:41:33 2008-10-23 13:55:02 2
3 002 3 2008-10-23 14:08:35 2008-10-23 14:22:06 2
4 002 1 2008-10-23 14:33:10 2008-10-23 14:33:10 1
5 002 2 2008-10-23 14:50:58 2008-10-23 15:25:14 3