You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中通过GroupBy与Lambda创建含(stage, days)元组的列表

问题描述

我们有如下的Pandas DataFrame df:

idstagedays
a1A1
a2A3
a3A2
a4A5
a1B1
a2B2
a1C2
a3D3

目前已经通过GroupBy结合lambda实现了按id分组聚合stage列为列表,代码如下:

df1 = df.groupby('id').apply(lambda x: list(x['stage'])).reset_index()

得到的输出结果是:

id           0
0  a1  [A, B, C]
1  a2     [A, B]
2  a3     [A, D]
3  a4        [A]

现在需要修改代码,让每个id分组对应的列表元素是(stage, days)形式的元组,该怎么实现?

解决方案

其实只需要修改lambda函数里的逻辑,把stage和days两列配对成元组再转成列表就可以了,最简洁的方式是用zip()函数来实现:

df1 = df.groupby('id').apply(lambda x: list(zip(x['stage'], x['days']))).reset_index()

如果你想更直观地逐行构建元组,也可以用apply按行处理:

df1 = df.groupby('id').apply(lambda x: x.apply(lambda row: (row['stage'], row['days']), axis=1).tolist()).reset_index()

运行修改后的代码后,你会得到预期的结果:

id                     0
0  a1  [(A, 1), (B, 1), (C, 2)]
1  a2        [(A, 3), (B, 2)]
2  a3        [(A, 2), (D, 3)]
3  a4           [(A, 5)]

简单解释一下:zip(x['stage'], x['days'])会把每个分组里的stage和days对应位置的元素打包成元组,再用list()把这个zip对象转换成列表,完美满足你的需求~


内容的提问来源于stack exchange,提问作者Edamame

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:13:08