使用Python实现DataFrame特定条件转置并转换为目标格式求助
解决方法
你当前的代码已经完成了一半的转换逻辑,问题出在直接删除了字段名里的数字编号,丢失了1/2对应的期数维度,补充拆分字段、透视两步即可得到目标格式,修改后的完整代码如下:
import pandas as pd import numpy as np import openpyxl # 读取Excel数据 df = pd.read_excel('Test3.xlsx') # 保留需要的列,无需手动转列表重构DataFrame lista = df[['Cliente', 'ID', 'Costo1', 'Margen1', 'Ganancia1', 'Costo2', 'Margen2', 'Ganancia2']].copy() # 宽表转长表 new_df = lista.melt(id_vars=['Cliente','ID'], var_name='variable', value_name='value') # 拆分字段名为【指标名】+【期数】,比如Costo1拆为 指标=Costo,期数=1 new_df[['指标', '期数']] = new_df['variable'].str.extract(r'^([^\d]+)(\d+)$') # 透视转换得到最终目标格式 final_df = new_df.pivot( index=['Cliente', 'ID', '期数'], columns='指标', values='value' ).reset_index().rename_axis(columns=None) # 清除透视生成的多余索引名 # 可直接导出为Excel文件 final_df.to_excel('转换结果.xlsx', index=False) print(final_df)
如果后续新增Costo3/Margen3/Ganancia3这类第三期、第四期的字段,上述代码无需修改也能自动适配转换。
内容的提问来源于stack exchange,提问作者tatankadrums
相关产品推荐
相关产品推荐

