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

如何将Pandas DataFrame转换为按标题分组的指定结构元组列表

实现方法

核心逻辑

  • 按照title列对原DataFrame做分组,分组时开启sort=False保留原数据中title的出现顺序,避免自动字典序排序打乱原有顺序
  • 对每个分组内的非title字段行,逐行转换为值元组,将同组的元组收集为列表
  • 最终将所有分组的(标题字符串, 元组列表)元素收集为整体列表,即为目标结构

可直接运行的代码

首先导入pandas并构造和示例一致的测试数据:

import pandas as pd

# 构造示例结构的原始DataFrame
df = pd.DataFrame({
    "title": ["title1", "title1", "title1", "title2", "title2", "title2"],
    "field1": ["value11", "value21", "value31", "value1_1", "value2_1", "value3_1"],
    "field2": ["value12", "value22", "value32", "value1_2", "value2_2", "value3_2"],
    "field3": ["value13", "value23", "value33", "value1_3", "value2_3", "value3_3"],
    "field4": ["value14", "value24", "value34", "value1_4", "value2_4", "value3_4"],
    "field5": ["value15", "value25", "value35", "value1_5", "value2_5", "value3_5"],
})

然后执行转换逻辑:

result = []
# 按title分组,sort=False保证分组顺序和原DataFrame一致
for title, group in df.groupby("title", sort=False):
    # 逐行将非title字段转为无索引的普通元组,收集为列表
    row_tuple_list = list(group.drop(columns="title").itertuples(index=False, name=None))
    result.append( (title, row_tuple_list) )

转换结果验证

运行上述代码后,result的结构和示例要求完全匹配:

[
    ("title1", [
        ("value11", "value12", "value13", "value14", "value15"),
        ("value21", "value22", "value23", "value24", "value25"),
        ("value31", "value32", "value33", "value34", "value35")
    ]),
    ("title2", [
        ("value1_1", "value1_2", "value1_3", "value1_4", "value1_5"),
        ("value2_1", "value2_2", "value2_3", "value2_4", "value2_5"),
        ("value3_1", "value3_2", "value3_3", "value3_4", "value3_5")
    ])
]

注意事项

  • 必须给groupby传入sort=False参数,否则pandas会默认按照title的字符串字典序对分组结果排序,在title命名为title10、title2这类场景下会打乱原数据的顺序
  • itertuples的name=None参数会把每行返回为普通Python元组,避免返回具名元组带来的类型差异,完全匹配需求里的元组结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 14:36:03