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

如何将含actual、forecast的cost type列拆分为两个独立列

将cost type分类列拆分为actual、forecast独立列的实现方法

你需要做的是*行转列(透视)*操作,不同数据处理工具的实现方式如下,最终可完全匹配示例中的表结构:

列转换效果示例


Python (Pandas)

使用pivot函数完成转换,若同维度存在多条重复记录换用pivot_table加聚合规则即可:

import pandas as pd

# 替换index参数为你表中需要保留的所有公共维度列,比如日期、部门、项目等
pivot_df = df.pivot(
    index=["date", "department"],
    columns="cost type",
    values="cost" # 替换为你表中存储成本数值的列名
).reset_index()

# 清理列名索引,按需重命名列
pivot_df.columns.name = None
pivot_df = pivot_df.rename(columns={
    "actual": "actual_cost",
    "forecast": "forecast_cost"
})

如果同维度+cost type对应多条数据,用以下写法聚合:

pivot_df = df.pivot_table(
    index=["date", "department"],
    columns="cost type",
    values="cost",
    aggfunc="sum" # 可替换为mean、count等你需要的聚合方式
).reset_index()

Power BI / Excel Power Query

  • 选中原始数据表进入Power Query编辑器
  • 选中除cost type和成本数值列之外的所有公共维度列
  • 点击顶部菜单栏「转换」→ 「透视列」
  • 弹窗中「值列」选择存储成本数值的列,「聚合值函数」根据需求选择:单维度无重复值选「不要聚合」,有重复值选求和/平均等对应规则
  • 点击确认即可自动生成actual、forecast两个独立列,调整列名即可。

SQL

所有SQL引擎都可以用条件聚合实现,兼容性最强:

SELECT
    date,
    department, -- 依次列出所有需要保留的公共维度列
    SUM(CASE WHEN `cost type` = 'actual' THEN cost ELSE 0 END) AS actual_cost,
    SUM(CASE WHEN `cost type` = 'forecast' THEN cost ELSE 0 END) AS forecast_cost
FROM your_original_table
-- 不需要聚合的话删除SUM函数和下面的GROUP BY子句即可
GROUP BY date, department

注意:操作前请确认公共维度列的选择完整,漏选维度会导致数据聚合错位、数值匹配错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 03:36:34