Power BI实现Columns to Rows:油品品牌列转行的需求与问题
解决油品表格列转行的方案
核心思路
你需要执行**表格逆透视(Unpivot)**操作,把原本作为列名的油品品牌转为行数据,同时关联对应的价格、变动值和变动百分比列。
工具实现方案
Excel/Power Query
- 选中原始表格数据,进入「数据」选项卡,点击「从表格/区域」启动Power Query编辑器
- 选中所有油品价格列、变动列、变动百分比列(不要选Date列)
- 在Power Query的「转换」选项卡中,点击「逆透视列」→「逆透视其他列」
- 若原始列名有统一前缀(比如「92#汽油价格」「92#汽油变动」),可按前缀分组,将同一油品的价格、变动、百分比整合到同一行
- 调整完成后关闭Power Query,加载数据即可得到目标格式
Python(Pandas)
代码示例如下:
import pandas as pd # 读取原始数据 df = pd.read_excel("your_file.xlsx") # 定义各油品对应的列组 oil_columns = { "92#汽油": ["92#汽油价格", "92#汽油变动", "92#汽油变动%"], "0#柴油": ["0#柴油价格", "0#柴油变动", "0#柴油变动%"] # 按实际油品补充 } # 构建结果数据 result_rows = [] for _, row in df.iterrows(): date = row["Date"] for oil_name, cols in oil_columns.items(): result_rows.append({ "油品品牌": oil_name, "日期": date, "价格": row[cols[0]], "较前一日价格变动": row[cols[1]], "变动百分比": row[cols[2]] }) # 生成结果表格 result_df = pd.DataFrame(result_rows) result_df.to_excel("output.xlsx", index=False)
SQL(数据库场景)
假设原始表名为oil_prices,用UNION ALL实现列转行:
SELECT '92#汽油' AS 油品品牌, Date AS 日期, 92#汽油价格 AS 价格, 92#汽油变动 AS 较前一日价格变动, 92#汽油变动% AS 变动百分比 FROM oil_prices UNION ALL SELECT '0#柴油' AS 油品品牌, Date AS 日期, 0#柴油价格 AS 价格, 0#柴油变动 AS 较前一日价格变动, 0#柴油变动% AS 变动百分比 FROM oil_prices -- 其他油品依次添加UNION ALL语句
内容的提问来源于stack exchange,提问作者Ritesh Prasad Singh
相关产品推荐
相关产品推荐

