2015-10-07 4 views
1

У меня есть TimeSeries набор данных, который выглядит немного какАгрегирование Значения столбцов в последовательность Использование панды

dt   userid var1 var2 
2013-04-27 100001 a 50 
2013-04-27 100002 a 45 
2013-04-28 100001 b 10 
2013-04-29 100001 c 20 
2013-04-29 100002 b 15 

Я хотел бы, чтобы извлечь последовательность событий для каждого пользователя - в новый DataFrame похожи в

userid activity_seq 
100001 [a, b, c] 
100002  [a, b] 

порядок var1 в activity_seq колонки следует dt столбца (т.е. в хронологический порядок). Не могли бы вы предложить, как это можно сделать с помощью панд?

Заранее спасибо.


Вот фрагмент кода, чтобы воссоздать первоначальный DataFrame,

import pandas as pd 

l1 = ['2013-04-27', '2013-04-27', '2013-04-28', '2013-04-29', '2013-04-29'] 
l2 = [100001, 100002, 100001, 100001, 100002] 
l3 = ['a','a','b','c','b'] 
l4 = [50, 45, 10, 20, 15] 
df = pd.DataFrame({'dt':l1, 'userid':l2, 'var1':l3, 'var2':l4}) 

ответ

2

Вы можете groupby на «идентификатор пользователя», а затем на «var1» цв вызова apply и передать list создать последовательность, вы можете переименовать/сброс, если требуется.

In [58]: 
df.groupby('userid')['var1'].apply(list) 

Out[58]: 
userid 
100001 [a, b, c] 
100002  [a, b] 
Name: var1, dtype: object 

Чтобы получить нужный ФР, вызовите reset_index и rename:

In [62]: 
df.groupby('userid')['var1'].apply(list).reset_index().rename(columns={'var1':'activity_seq'}) 

Out[62]: 
    userid activity_seq 
0 100001 [a, b, c] 
1 100002  [a, b] 
Смежные вопросы