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

按id列分组将DataFrame转为嵌套字典列表适配sklearn_crfsuite.CRF

按ID分组将DataFrame转换为嵌套字典列表(适配sklearn_crfsuite.CRF格式)

原始DataFrame示例

假设你的DataFrame结构如下:

import pandas as pd

df = pd.DataFrame({
    'id': [0, 0, 1, 1],
    'feature1': ['a', 'b', 'c', 'd'],
    'feature2': [1, 2, 3, 4],
    'label': ['X', 'Y', 'X', 'Y']
})

错误尝试与结果

直接使用df.to_dict('records')会得到未分组的扁平字典列表,不符合需求:

# 错误代码
flat_records = df.to_dict('records')

输出结果:

[
    {'id': 0, 'feature1': 'a', 'feature2': 1, 'label': 'X'},
    {'id': 0, 'feature1': 'b', 'feature2': 2, 'label': 'Y'},
    {'id': 1, 'feature1': 'c', 'feature2': 3, 'label': 'X'},
    {'id': 1, 'feature1': 'd', 'feature2': 4, 'label': 'Y'}
]

正确实现代码

通过groupby按id分组,再将每个组转换为字典列表,最后组合成嵌套结构:

# 按id分组,移除id列后转为字典列表,再收集所有组的结果
grouped_feats = [group.drop('id', axis=1).to_dict('records') for _, group in df.groupby('id')]

期望输出结果

执行上述代码后,得到符合sklearn_crfsuite.CRF参数要求的嵌套结构:

[
    [
        {'feature1': 'a', 'feature2': 1, 'label': 'X'},
        {'feature1': 'b', 'feature2': 2, 'label': 'Y'}
    ],
    [
        {'feature1': 'c', 'feature2': 3, 'label': 'X'},
        {'feature1': 'd', 'feature2': 4, 'label': 'Y'}
    ]
]

说明

  • groupby('id')将DataFrame按id值分组,相同id的行归为一组
  • drop('id', axis=1)移除无用的id列(CRF模型不需要该字段作为特征)
  • to_dict('records')将每组的行转换为字典列表
  • 列表推导式将所有组的字典列表收集为最终的嵌套大列表,完美适配sklearn_crfsuite.CRF的feat参数格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:03:00