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

如何在Pandas DataFrame中按category_id分组生成对应新列

解决方案

你需要结合image_id和category_id进行分组聚合,再将category_id转为列,具体代码如下:

方法1:聚合为集合对象

import pandas as pd

# 按image_id和category_id分组,聚合chessboard_position为集合
result = df.groupby(['image_id', 'category_id'])['chessboard_position'].agg(set).unstack('category_id')
# 将image_id从索引转为普通列
result = result.reset_index()

执行后得到的结果结构与你期望的一致:

image_id06789
0NaNNaN{a8}{b8}{c8}
1{b4, a2}{f7, g7, h7}NaNNaNNaN

方法2:聚合为字符串格式(与示例完全匹配)

如果需要将集合显示为{b4, a2}这样的字符串而非Python集合对象,修改聚合函数即可:

result = df.groupby(['image_id', 'category_id'])['chessboard_position'].agg(lambda x: f"{{{', '.join(x)}}}").unstack('category_id').reset_index()

原代码失效原因

你之前的代码仅按image_id分组,未关联category_id,生成的列是按数据出现顺序编号,而非对应分类ID的值。通过同时按image_id和category_id分组,先聚合同一图片、同一分类的位置,再用unstack('category_id')将分类ID转为列名,就能实现分类与列的匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 15:47:42