You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:54:08