基于Doc. #列转置Pandas数据集未果,求实现目标横向格式方案
解决DataFrame按Doc.#转置为带New/Old列的横向结构
核心方法:使用pivot实现数据重塑
直接用transpose()或单纯groupby()无法实现目标,需要通过**透视(pivot)**将长格式数据转为宽格式,同时保留New/Old值的对应关系。
步骤示例(基于pandas)
- 导入依赖
import pandas as pd
- 模拟匹配你的原始数据结构
df = pd.DataFrame({ "Doc. #": [123, 123, 456, 456], "字段名称": ["客户编码", "客户名称", "客户编码", "客户名称"], "New": ["A001", "张三", "B001", "李四"], "Old": ["A000", "张四", "B000", "李五"] })
- 执行透视与列名整理
# 按Doc.#分组,以字段名称为列,New/Old为值进行透视 pivoted = df.pivot(index="Doc. #", columns="字段名称", values=["New", "Old"]) # 重命名列,格式改为「字段名称_New」「字段名称_Old」 pivoted.columns = [f"{field}_{val_type}" for val_type, field in pivoted.columns] # 重置索引,让Doc.#回到普通列 result = pivoted.reset_index()
执行后得到的result就是你需要的横向结构:每个Doc. #对应一行,每个字段分别对应字段名称_New和字段名称_Old两列。
关键说明
transpose()仅做行列互换,无法按业务维度(Doc.#、字段)重组数据,因此不适用。groupby()本身是分组聚合工具,需要结合透视/重塑操作才能实现宽表转换,单独使用无法达到目标。
内容的提问来源于stack exchange,提问作者j1102
相关产品推荐
相关产品推荐

