如何将含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
相关产品推荐
相关产品推荐

