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

如何用Python或Excel VBA宏合并DataFrame中三列同名数据?

数据转换方案

一、Excel内置快速方法(最简便,无需代码)

这是最快的处理方式,利用Power Query完成逆透视:

  • 选中包含表头的原始数据区域
  • 点击「数据」选项卡 → 「从表格/区域」,确认弹窗后进入Power Query编辑器
  • 选中「日期」「编号」之外的所有列(即重复的名称列)
  • 点击「转换」选项卡 → 「逆透视列」→ 「逆透视其他列」
  • 右键将自动生成的「属性」列重命名为「名称」,「值」列重命名为「数值」
  • 点击「关闭并上载」,转换后的数据会自动生成新工作表

二、Python Pandas处理方案

利用melt函数快速实现数据逆透视:

import pandas as pd

# 读取原始Excel文件,替换为你的文件路径
df = pd.read_excel("原始数据.xlsx", sheet_name="Sheet1")

# 执行转换:保留日期、编号列,将其他列转为名称+数值的行
transformed_df = pd.melt(
    df,
    id_vars=["日期", "编号"],
    var_name="名称",
    value_name="数值"
)

# 过滤空值行(可选,根据原始数据情况调整)
transformed_df = transformed_df.dropna(subset=["数值"])

# 保存转换后的数据
transformed_df.to_excel("转换后数据.xlsx", index=False)

三、Excel VBA宏处理方案

适合习惯用Excel宏的场景:

Sub 转换数据格式()
    Dim srcSheet As Worksheet, destSheet As Worksheet
    Dim lastRow As Long, lastCol As Long, i As Long, j As Long, destRow As Long
    
    ' 指定原始数据工作表和新建目标工作表
    Set srcSheet = ThisWorkbook.Sheets("Sheet1") ' 替换为你的原始表名
    Set destSheet = ThisWorkbook.Sheets.Add
    destSheet.Name = "转换后数据"
    
    ' 写入目标表头
    destSheet.Cells(1, 1) = "日期"
    destSheet.Cells(1, 2) = "编号"
    destSheet.Cells(1, 3) = "名称"
    destSheet.Cells(1, 4) = "数值"
    destRow = 2
    
    ' 获取原始数据的行、列边界
    lastRow = srcSheet.Cells(srcSheet.Rows.Count, "A").End(xlUp).Row
    lastCol = srcSheet.Cells(1, srcSheet.Columns.Count).End(xlToLeft).Column
    
    ' 遍历每行数据,拆分写入目标表
    For i = 2 To lastRow
        For j = 3 To lastCol
            If srcSheet.Cells(i, j).Value <> "" Then
                destSheet.Cells(destRow, 1) = srcSheet.Cells(i, 1).Value
                destSheet.Cells(destRow, 2) = srcSheet.Cells(i, 2).Value
                destSheet.Cells(destRow, 3) = srcSheet.Cells(1, j).Value
                destSheet.Cells(destRow, 4) = srcSheet.Cells(i, j).Value
                destRow = destRow + 1
            End If
        Next j
    Next i
    
    ' 自动调整列宽
    destSheet.Columns.AutoFit
    MsgBox "转换完成!"
End Sub

使用说明:

  1. 打开Excel按Alt+F11进入VBA编辑器
  2. 右键当前工作簿 → 插入 → 模块
  3. 粘贴上述代码,修改Sheet1为你的原始数据工作表名
  4. 按F5运行宏,完成转换

内容的提问来源于stack exchange,提问作者user22724645

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:07:32