2015-10-07 80 views
1

我有一個時間序列數據集,看起來有點像彙總列值到一個序列中使用熊貓

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] 

var1activity_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

你可以在「用戶ID」 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 

,從而獲得所需DF,呼叫reset_indexrename

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]