技术问询:如何将列向表格转换为行向表格?
列向表格转行向格式的最优方法
你现有列向格式的表格如下:
| Category | 2023 Jan Rev | 2023 Jan GM | 2023 Feb Rev | 2023 Feb GM |
|---|---|---|---|---|
| Labour | 3512610 | 702522 | 789456 | 157891.2 |
| Equipment | 2450 | 490 | 459 | 91.8 |
| Materials | 1635 | 327 | 324 | 64.8 |
需要转换成如下行向格式:
Category | Period | Rev | GM __________ __________ __________ ___________ Labour | Jan 2023 | 3512610 | 702522 Equipment | Jan 2023 | 2450 | 490 Materials | Jan 2023 | 1635 | 327 Labour | Feb 2023 | 789456 | 157891.2 Equipment | Feb 2023 | 459 | 91.8 Materials | Feb 2023 | 324 | 64.8
以下是几种最优转换方法:
1. 手动转换(适合小表格)
直接按目标格式逐行整理:
- 先提取Jan 2023的Rev和GM数据,对应每个Category生成一行
- 再提取Feb 2023的Rev和GM数据,对应每个Category生成一行
- 最后对齐列格式,保证排版整齐
2. Excel/Google Sheets 逆透视(高效通用)
Excel操作步骤:
- 选中整个表格区域(包括表头)
- 点击「数据」选项卡 → 「从表格/区域」打开Power Query编辑器
- 在Power Query中,选中
Category列,右键 → 「逆透视其他列」 - 此时会生成
Attribute和Value两列,选中Attribute列 → 「转换」选项卡 → 「拆分列」→ 按空格分隔,拆分成年份、月份、指标三部分 - 删除年份列,选中表格 → 「转换」选项卡 → 「透视列」,以「指标」为透视列、「Value」为值列,合并Rev和GM数据
- 最后调整表头为
Category、Period(将月份格式改为Jan 2023)、Rev、GM,导出数据即可
Google Sheets操作步骤:
可以直接用数组公式快速生成结果:
=QUERY({A2:A4, "Jan 2023", B2:B4, C2:C4; A2:A4, "Feb 2023", D2:D4, E2:E4}, "select Col1, Col2, Col3, Col4 where Col1 is not null", 1)
运行后手动修改表头为目标格式即可
3. Python脚本转换(适合批量/自动化)
如果有大量类似表格需要转换,用pandas库可以快速处理:
import pandas as pd # 加载原始数据 df = pd.DataFrame({ "Category": ["Labour", "Equipment", "Materials"], "2023 Jan Rev": [3512610, 2450, 1635], "2023 Jan GM": [702522, 490, 327], "2023 Feb Rev": [789456, 459, 324], "2023 Feb GM": [157891.2, 91.8, 64.8] }) # 逆透视处理 df_melted = df.melt(id_vars="Category", var_name="Attribute", value_name="Value") # 拆分属性列 df_melted[["Year", "Month", "Metric"]] = df_melted["Attribute"].str.split(" ", expand=True) # 透视合并Rev和GM df_pivoted = df_melted.pivot_table(index=["Category", "Year", "Month"], columns="Metric", values="Value").reset_index() # 生成Period列并整理格式 df_pivoted["Period"] = df_pivoted["Month"] + " " + df_pivoted["Year"] result = df_pivoted[["Category", "Period", "Rev", "GM"]] # 输出结果 print(result.to_string(index=False))
运行后会直接输出符合要求的行向格式数据
内容的提问来源于stack exchange,提问作者Renna
相关产品推荐
相关产品推荐

