如何用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,再通过透视转换格式:
- 导入依赖库
import pandas as pd
- 加载数据
替换成你实际的数据源加载方式,比如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)
- 创建分组标识
以CODIGO作为每个记录的起始标记,每遇到一次CODIGO就生成一个新的分组ID:
df['group_id'] = (df['ATRIBUTE'] == 'CODIGO').cumsum()
- 透视转换为宽格式
通过pivot将长格式转为宽格式,并用NAN填充缺失值:
result = df.pivot(index='group_id', columns='ATRIBUTE', values='DESCRIPTION').reset_index(drop=True).fillna('NAN')
- 调整列顺序匹配目标格式
指定列的排列顺序,确保和目标表格一致:
column_order = ['CODIGO', 'TITULO', 'AUTOR', 'SUMARIO', 'EXTENSION', 'NOTAS', 'OTROS'] result = result[column_order]
- 查看结果
print(result.to_string(index=False))
执行后即可得到符合要求的宽格式表格。
为什么直接用pivot/melt没成功?
你之前的尝试失败是因为缺少分组标识,直接使用pivot会把所有相同ATRIBUTE的值合并,而无法区分属于不同记录的属性值。通过添加分组ID,我们可以让pivot准确识别每个独立记录的属性集合。
内容的提问来源于stack exchange,提问作者PAstudilloE
相关产品推荐
相关产品推荐

