如何使用Python将数据集的多列表头转换为单独一列?
宽表转长表(逆透视)实现方案
你需要的操作属于典型的宽表转长表(也叫逆透视/Unpivot/融合Melt),以下是两种常用场景的实现方法:
方案1:Python Pandas实现(适合大数据量、自动化场景)
核心调用Pandas内置的melt方法即可完成转换,无需复杂逻辑:
- 第一步:先识别原始数据中不需要转换的固定维度列(例如批次号、产品编号、测试工位这类非日期列),如果没有特殊固定列可以留空
- 第二步:执行转换代码,示例如下:
import pandas as pd # 读取原始数据,支持csv、excel等格式,按需修改读取方法 df = pd.read_csv("原始数据文件路径.csv") # 填写固定维度列,无则填空列表 [] fixed_cols = ['批次号', '产品型号', '测试组别'] # 执行逆透视转换 res_df = df.melt( id_vars=fixed_cols, var_name="日期", # 转换后存储日期的列名 value_name="Yield %" # 转换后存储良率的列名 ) # 可选:将日期列转为标准时间格式,可自定义年份避免混淆 res_df['日期'] = pd.to_datetime(res_df['日期'], format="%m/%d").apply(lambda x: x.replace(year=2024)) # 导出结果 res_df.to_csv("转换后良率长表.csv", index=False)
方案2:Excel Power Query实现(适合小数据量、无代码场景)
用Excel内置的可视化功能即可完成,无需写公式:
- 选中原始数据区域,点击「数据」选项卡 → 「从表格/区域」,导入Power Query编辑器
- 按住Ctrl选中所有不需要转换的固定列,右键点击「逆透视其他列」
- 自动生成的两列默认名称为「属性」、「值」,分别重命名为「日期」、「Yield %」
- 点击「关闭并上载」即可将转换后的数据导出到Excel工作表
补充说明:如果原始数据的日期列下存在空值,转换后会保留空值行,可根据需求过滤:Python中执行
res_df = res_df.dropna(subset=['Yield %']),Excel中直接在Power Query里筛选掉Yield %列的空值即可。
内容的提问来源于stack exchange,提问作者BrOtis
相关产品推荐
相关产品推荐

