python - 使用 Pandas 将列值聚合到序列中

标签 python pandas

我有一个时间序列数据集,看起来有点像

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_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]

关于python - 使用 Pandas 将列值聚合到序列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32990192/

相关文章:

python - 为什么在将列表转换为集合时集合是有序的?

python - 为什么 str.encode ('ascii' ) 不适用于这种情况?

Python 处理字典、文件

python - 根据条件将字典项拆分为较小的字典

python - 如何在Python中查找不属于样本的值?

延迟日期时间索引列的 Pythonic 方法

python-3.x - 根据多个条件按列名过滤数据框

python - 计算完整数据帧中每个 Sequence_ID 的最大频率

python - 为什么我应该使用 "getattr()"?

Pythonic/Panda 方式创建 Groupby 函数