如何将Pandas DataFrame按p_id分组转换为指定结构的二维列表
实现方法
你之前的写法不符合预期的原因有两个:
- 直接对分组后的DataFrame执行
apply(list)会返回列名的列表,而非每行两值组成的元组 - 注意列名大小写匹配:你示例代码里写的
time和实际数据的列名Time不一致,会触发键错误
代码实现
首先构造示例DataFrame:
import pandas as pd data = { "p_id": [1, 1, 1, 2,2,3,3], "m_id": [11,25,35,11,35,25,35], "Time": [25,40,10,21,13,15,20] } df = pd.DataFrame(data)
通用写法(小数据量适用)
Jobs = df.groupby('p_id')[['m_id', 'Time']].apply(lambda g: [tuple(row) for row in g.values]).tolist()
高效写法(大数据量适用,避免逐行循环)
Jobs = df.assign(job=df[['m_id','Time']].agg(tuple, axis=1))\ .groupby('p_id')['job']\ .agg(list)\ .tolist()
输出验证
执行后打印Jobs即可得到你需要的结构:
print(Jobs) # 输出结果: # [[(11, 25), (25, 40), (35, 10)], [(11, 21), (35, 13)], [(25, 15), (35, 20)]]
内容的提问来源于stack exchange,提问作者Jume
相关产品推荐
相关产品推荐

