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

如何用Pandas将两列属性-描述表转换为多列属性表?

长格式表格转宽格式的解决方案

原始数据格式

ATRIBUTE    DESCRIPTION
CODIGO        A1
TITULO        A2
AUTOR         A3
SUMARIO       A4
CODIGO        B1
TITULO        B2
AUTOR         B3
SUMARIO       B4
EXTENSION     B5
CODIGO        C1
AUTOR         C3
SUMARIO       C4
EXTENSION     C5
NOTAS         C6
OTROS         C7
 ...          ...

目标数据格式

CODIGO  TITULO  AUTOR   SUMARIO EXTENSION   NOTAS   OTROS
  A1      A2     A3      A4       NAN        NAN     NAN
  B1      B2     B3      B4       B5         NAN     NAN
  C1      NAN    C3      C4       C5         C6      C7
  ...     ...    ...     ...      ...        ...     ...

解决步骤(使用Python Pandas)

核心思路是先给每个独立记录分配分组ID,再通过透视转换格式:

  1. 导入依赖库
import pandas as pd
  1. 加载数据
    替换成你实际的数据源加载方式,比如pd.read_csv():
data = {
    'ATRIBUTE': ['CODIGO', 'TITULO', 'AUTOR', 'SUMARIO', 'CODIGO', 'TITULO', 'AUTOR', 'SUMARIO', 'EXTENSION', 'CODIGO', 'AUTOR', 'SUMARIO', 'EXTENSION', 'NOTAS', 'OTROS'],
    'DESCRIPTION': ['A1', 'A2', 'A3', 'A4', 'B1', 'B2', 'B3', 'B4', 'B5', 'C1', 'C3', 'C4', 'C5', 'C6', 'C7']
}
df = pd.DataFrame(data)
  1. 创建分组标识
    以CODIGO作为每个记录的起始标记,每遇到一次CODIGO就生成一个新的分组ID:
df['group_id'] = (df['ATRIBUTE'] == 'CODIGO').cumsum()
  1. 透视转换为宽格式
    通过pivot将长格式转为宽格式,并用NAN填充缺失值:
result = df.pivot(index='group_id', columns='ATRIBUTE', values='DESCRIPTION').reset_index(drop=True).fillna('NAN')
  1. 调整列顺序匹配目标格式
    指定列的排列顺序,确保和目标表格一致:
column_order = ['CODIGO', 'TITULO', 'AUTOR', 'SUMARIO', 'EXTENSION', 'NOTAS', 'OTROS']
result = result[column_order]
  1. 查看结果
print(result.to_string(index=False))

执行后即可得到符合要求的宽格式表格。

为什么直接用pivot/melt没成功?

你之前的尝试失败是因为缺少分组标识,直接使用pivot会把所有相同ATRIBUTE的值合并,而无法区分属于不同记录的属性值。通过添加分组ID,我们可以让pivot准确识别每个独立记录的属性集合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 13:17:20