Python中如何将多行结构的pandas DataFrame转换为单行?
解决方法
你可以直接用pandas的分组聚合实现多行转单行的需求,根据你对labels列的存储要求,选对应写法即可:
- 如果你需要
labels列保留为列表类型(后续做标签统计、遍历处理更方便),执行以下代码:
import pandas as pd # 原始DataFrame定义 df = pd.DataFrame({'image_id':'490.png', 'labels':['logo_sony', 'text', 'text', 'object_headphone', 'text', 'button']}) # 按image_id分组,将同组labels聚合为列表 df_result = df.groupby('image_id', as_index=False)['labels'].agg(list)
运行后得到的结果中,labels列存储原生Python列表,结构如下:
image_id labels 0 490.png [logo_sony, text, text, object_headphone, text, button]
- 如果你需要
labels列和你给出的预期效果完全一致,为带单引号、逗号分隔的字符串格式,把聚合逻辑替换为字符串拼接即可:
df_result = df.groupby('image_id', as_index=False)['labels'].agg( lambda col_val: ', '.join([f"'{single_label}'" for single_label in col_val]) )
运行后输出完全匹配你的预期效果:
image_id labels 0 490.png 'logo_sony', 'text', 'text', 'object_headphone', 'text', 'button'
注:这个写法兼容多image_id的场景,如果后续你的数据集里包含多个不同的image_id,代码会自动把每个image_id对应的所有标签聚合成单行,不需要额外调整逻辑。
内容的提问来源于stack exchange,提问作者Samaneh Arzpeima
相关产品推荐
相关产品推荐

