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

如何按除首列外的所有列分组并将首列聚合为列表?

问题解决:按指定列分组聚合首列为列表

原始DataFrame

import pandas as pd
df = pd.DataFrame({'col_1': ['yes','no'], 'test_1':['a','b'], 'test_2':['a','b']})

需求

按除第一列外的所有列分组,将每组对应的第一列数据聚合为列表,且逻辑需适配多行场景:基于第二列至最后一列的相同分组,合并对应首列数据为列表。

尝试的代码

col_names = df.columns.to_list()

df_out = df.groupby([col_names[1:]])[col_names[0]].agg(list)

期望输出的目标DataFrame

df = pd.DataFrame({'col_1': [['yes','no']], 'test_1':['a'], 'test_2':['b']})

修正后的解决方案

你当前的代码问题在于groupby传入了嵌套列表(col_names[1:]本身就是列名列表,不需要再加一层括号),导致分组逻辑出错。修正后代码如下:

import pandas as pd

df = pd.DataFrame({'col_1': ['yes','no'], 'test_1':['a','b'], 'test_2':['a','b']})
col_names = df.columns.to_list()

# 去掉groupby里多余的括号,直接传入列名列表,再用reset_index还原分组列为普通列
df_out = df.groupby(col_names[1:])[col_names[0]].agg(list).reset_index()

代码说明

  • groupby(col_names[1:]):直接传入从第二列开始的所有列名作为分组键,无需额外嵌套
  • .reset_index():将分组后的索引(原分组列)还原为普通列,输出结构与期望完全匹配

多行场景验证

扩展测试数据验证适配性:

df = pd.DataFrame({
    'col_1': ['yes','no','maybe','sure'],
    'test_1':['a','b','a','b'],
    'test_2':['a','b','a','b']
})

运行修正后的代码,输出结果:

col_1 test_1 test_2
0  [yes, maybe]      a      a
1    [no, sure]      b      b

完全符合需求:相同test_1+test_2分组下,col_1被聚合为对应列表。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 08:30:51