python - 如何聚合 Pandas 数据框中的累积列表?

标签 python pandas pandas-groupby

我有一个像下面这样的 Pandas 数据框。

    +--------+-------------------+
    | worker |  day  |    tasks  |
    +--------+-------------------+
    |   A    |   2   | 'read'    |
    |   A    |   9   | 'write'   |
    |   B    |   1   | 'read'    |
    |   B    |   2   | 'write'   |
    |   B    |   4   | 'execute' |
    +--------+-------------------+

我需要按[col_1, day]对数据帧进行分组并获得累积的任务列表。
例如如果工作人员“A”在第 2 天有任务“已读”,那么第 9 天的任务应该是 ['读'、'写']列表。


所需的数据框如下所示:

    +--------+-------------------------------------+
    | worker |  day  |          aggregation        |
    +--------+-------------------------------------+
    |   A    |   2   | ['read']                    |
    |   A    |   9   | ['read', 'write']           |
    |   B    |   1   | ['read']                    |
    |   B    |   2   | ['read', 'write']           |
    |   B    |   4   | ['read', 'write', 'execute']|
    +--------+-------------------------------------+

我尝试使用 cumsum

df = df.groupby(['worker', 'day'])['tasks'].apply(list).reset_index(name='aggregation').cumsum()

但它聚合了所有列的累积,而不是特定列的组内的累积。

最佳答案

一种简单的方法(尽管在性能方面并不理想 - 然后您再次将列表存储在列中,因此您的里程会有所不同)是执行 groupbycumsum 带列表。

df['tasks'].map(lambda x: [x]).groupby(df['worker']).apply(pd.Series.cumsum) 

0                    [read]
1             [read, write]
2                    [read]
3             [read, write]
4    [read, write, execute]
Name: tasks, dtype: object

或者,非常相似,

(df.assign(tasks=df['tasks'].map(lambda x: [x]))
   .groupby('worker')['tasks']
   .apply(pd.Series.cumsum))

0                    [read]
1             [read, write]
2                    [read]
3             [read, write]
4    [read, write, execute]
Name: tasks, dtype: object

由于您正在计算对象(而不是数字数据),因此我们需要应用 pd.Series.cumsum 而不是调用 cythonized GroupBy.cumsum ,它会阻塞python 列表。

关于python - 如何聚合 Pandas 数据框中的累积列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62875287/

相关文章:

python - 打包为 OS X .app 时请求中的 SSLError

python - python如何测试从数据库中提取的一些纯文本中的二进制数据

python - 将 dict 构造函数转换为 Pandas MultiIndex 数据框

python - 使用 `pandas.cut()` ,我如何获得整数分箱并避免获得负的最低限度?

python - Windows 任务栏(Windows 7?)——如何在控制面板通知对话框中设置应用程序名称

python - 如何计算数据帧中一行中非 NaN 列的数量?

python - Pandas 和 python : split dataframe into many dataframes based on column value containing substring

python - 如何在 Pandas DataFrame 索引中获取每个月的最后一天(使用 TimeGrouper)

python - 如何在值符号更改后重置 cumsum?

python - 清理和填充数据科学分析的分类变量