Python使用melt与concat处理多列表格输出不符合预期求助
Pandas实现多列融合与拼接方案
首先确保你已安装pandas库,将源表格读取为df变量后可使用以下两种方法实现需求:
方法1:分块转换后拼接(逻辑直观易调整)
import pandas as pd # 替换为你表中不需要转换的固定列,比如学生ID、姓名等 id_cols = ["学生ID", "姓名"] # 拆分每组对应列,重命名后合并 sub_df1 = df[id_cols + ["科目1", "分数1", "排名1"]].rename(columns={"科目1":"科目", "分数1":"分数", "排名1":"排名"}) sub_df2 = df[id_cols + ["科目2", "分数2", "排名2"]].rename(columns={"科目2":"科目", "分数2":"分数", "排名2":"排名"}) sub_df3 = df[id_cols + ["科目3", "分数3", "排名3"]].rename(columns={"科目3":"科目", "分数3":"分数", "排名3":"排名"}) # 拼接所有子表,删除科目列为空的无效行 result = pd.concat([sub_df1, sub_df2, sub_df3], ignore_index=True).dropna(subset=["科目"])
方法2:wide_to_long 一键转换(适合列数较多的场景)
该方法要求你的宽列命名符合「前缀+数字序号」的规则,比如科目1、分数1、排名1,科目2、分数2、排名2这类格式:
result = pd.wide_to_long( df, stubnames=["科目", "分数", "排名"], i=id_cols, j="科目序号", sep="" ).reset_index().drop("科目序号", axis=1)
结果导出
你可以用以下代码直接导出转换后的结果到Excel:
result.to_excel("转换结果.xlsx", index=False)
- 若你的列命名规则不是
前缀+数字,可调整wide_to_long的sep参数匹配你的命名分隔符 - 可根据实际需求调整
dropna的过滤条件,保留或删除特定空值行
内容的提问来源于stack exchange,提问作者user10689363
相关产品推荐
相关产品推荐

