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

如何在Pandas中按列GroupBy、排序后将列值合并为列表

Pandas按ID分组后将列值合并为有序列表的实现方案

完整实现代码

import pandas as pd

# 初始数据
df = pd.DataFrame( { 
    "id" : [2957, 1456, 2223, 1456, 1456, 2957, 2223, 2957, 2223] , 
    "year" : [2018, 2015, 2018, 2016, 2017, 2016, 2017, 2017, 2016],
    "rating" : [3, 1, 2, 2, 3, 2, 3, 1, 1] }
)

# 步骤1:按id和year升序排序,确保分组内年份顺序正确
df_sorted = df.sort_values(by=['id', 'year'])

# 步骤2:按id分组,将year和rating列值合并为列表
result = df_sorted.groupby('id', as_index=False).agg({
    'year': list,
    'rating': list
})

print(result)

执行结果

id                  year      rating
0  1456  [2015, 2016, 2017]  [1, 2, 3]
1  2223  [2016, 2017, 2018]  [1, 3, 2]
2  2957  [2016, 2017, 2018]  [2, 1, 3]

关键逻辑说明

  • 排序环节:先对整个DataFrame按id和year升序排序,保证每个id对应的所有行已经按年份从小到大排列,后续分组生成的列表顺序才符合需求。
  • 分组聚合:使用groupby('id')按id分组,通过agg()方法指定对year和rating列分别应用list函数,直接将分组内的列值按顺序转换为列表。as_index=False用于保留id作为普通列,与期望结果结构一致。

备选实现方式(灵活但性能略低)

如果需要自定义更多逻辑,也可以使用apply()方法:

result = df_sorted.groupby('id', as_index=False).apply(
    lambda x: pd.Series({
        'year': x['year'].tolist(),
        'rating': x['rating'].tolist()
    })
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 00:06:19