我有一个时间序列数据集,看起来有点像
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]
activity_seq
列中 var1
的顺序遵循 dt
列(即按时间顺序)。有人可以建议如何使用 pandas 来实现这一点吗?
提前致谢。
<小时/>这是重新创建原始 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})
最佳答案
您可以groupby
在“userid”上,然后在“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_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]
关于python - 使用 Pandas 将列值聚合到序列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32990192/