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

如何拆分数据集单行并在生成的新行中保留公司名称字段?

宽表转长表拆分多部门预算数据实现方案

核心处理逻辑:将每行存储的多部门预算字段按部门维度拆分为独立行,自动过滤预算值为空的部门记录,拆分全程保留企业名称字段,最终输出统一结构的结果表。

方案1:Python Pandas 实现(适合批量处理csv/Excel数据)

直接运行以下代码,替换对应文件路径即可得到结果:

import pandas as pd

# 读取原始数据,支持csv、excel格式,读取excel替换为pd.read_excel即可
raw_df = pd.read_csv("你的原始预算数据路径.csv")

# 配置部门与对应字段的映射,后续新增部门直接在字典里加键值对即可
dept_field_map = {
    "Marketing": ("marketing_budget", "marketing_remaining"),
    "Finance": ("finance_budget", "finance_remaining"),
    "Sales": ("sales_budget", "sales_remaining")
}

split_result = []
for dept_name, (budget_col, remain_col) in dept_field_map.items():
    # 提取当前部门数据,过滤预算为空的记录
    dept_data = raw_df[["company", budget_col, remain_col]].dropna(subset=[budget_col])
    # 统一列名
    dept_data.columns = ["Company", "Budget", "Amount Remaining"]
    # 新增部门列
    dept_data["Department"] = dept_name
    split_result.append(dept_data)

# 合并所有部门数据,调整列顺序匹配输出要求
final_df = pd.concat(split_result)[["Company", "Department", "Budget", "Amount Remaining"]]

# 导出结果
final_df.to_csv("拆分完成的预算数据.csv", index=False)

注:如果原始数据中空值不是标准null,是-、无这类自定义标记,在读取数据后加一行raw_df = raw_df.replace(["-", "无"], pd.NA)即可正常识别空值。

方案2:Excel Power Query 实现(无代码操作,适合日常办公场景)

操作步骤:

  • 选中原始数据区域,点击顶部「数据」选项卡 → 选择「从表格/区域」,将数据导入Power Query编辑器
  • 选中company列,点击顶部「转换」选项卡 → 选择「逆透视列」→「逆透视其他列」,此时所有部门预算字段会被拆成属性、值两列
  • 选中「属性」列,点击「拆分列」→ 按分隔符_拆分,拆为2段,第一段为部门名称,第二段为指标类型(budget/remaining)
  • 选中指标类型列,点击「透视列」,值列选择「值」列,聚合方式选择「不要聚合」,此时会自动生成Budget、Remaining两列
  • 过滤Budget列中的null值,将列名重命名为要求的Company/Department/Budget/Amount Remaining,点击「关闭并上载」即可得到结果

方案3:SQL 实现(适合数据存储在数据库中的场景)

以MySQL语法为例,通过UNION ALL拼接各部门的非空数据即可:

SELECT 
    company AS Company,
    'Marketing' AS Department,
    marketing_budget AS Budget,
    marketing_remaining AS `Amount Remaining`
FROM enterprise_budget
WHERE marketing_budget IS NOT NULL

UNION ALL

SELECT 
    company AS Company,
    'Finance' AS Department,
    finance_budget AS Budget,
    finance_remaining AS `Amount Remaining`
FROM enterprise_budget
WHERE finance_budget IS NOT NULL

UNION ALL

SELECT 
    company AS Company,
    'Sales' AS Department,
    sales_budget AS Budget,
    sales_remaining AS `Amount Remaining`
FROM enterprise_budget
WHERE sales_budget IS NOT NULL

ORDER BY Company, Department;

注:你给出的期望输出示例里有两处笔误:Finace应为正确拼写Finance,Sales行Budget值200,00应为200,000,实际处理时注意校验数值和拼写即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 10:54:48