将多列扁平化为新行:如何转换含重复列的表格至规范结构
解决重复列表格转多行格式的方法
首先先明确我们的转换需求:
原始表格
| ID | Var | Var | Name | Name |
|---|---|---|---|---|
| 01 | 0001 | 0002 | Bill | Jim |
| 02 | 0003 | 0004 | Sam | Kyle |
目标表格
| ID | Var | Name |
|---|---|---|
| 01 | 0001 | Bill |
| 01 | 0002 | Jim |
| 02 | 0003 | Sam |
| 02 | 0004 | Kyle |
下面是两种实用的实现方法:
方法一:用Excel Power Query(无代码实现)
如果你习惯用Excel处理数据,Power Query是最省心的工具:
- 导入数据到Power Query:选中原始数据区域,点击顶部菜单栏的「数据」→「自表格/区域」,在弹出的对话框里确认数据包含标题,点击「确定」进入Power Query编辑器。
- 拆分重复列对:
- 先选中
ID列,然后按住Ctrl键选中第一列Var和第一列Name,右键选择「逆透视列对」; - 接着再选中
ID列,按住Ctrl选中第二列Var和第二列Name,同样右键选择「逆透视列对」;
- 先选中
- 整理列名:此时会生成两个
Value列,把它们分别重命名为Var和Name,然后删除多余的Attribute列; - 合并并加载数据:把两个拆分后的表合并(或者在步骤2时直接处理所有列对),最后点击「关闭并上载」,就能得到目标格式的表格。
(小提示:如果你的Excel版本没有「逆透视列对」选项,也可以先把所有非ID列逆透视,然后通过Attribute列的分组(比如把Var、Var.1归为一组)重新透视匹配,效果是一样的。)
方法二:用Python Pandas(代码实现)
如果你会点Python,用Pandas几行代码就能搞定:
import pandas as pd # 模拟原始数据(实际可以用pd.read_excel读取本地文件) raw_data = { 'ID': ['01', '02'], 'Var': ['0001', '0003'], 'Var_2': ['0002', '0004'], 'Name': ['Bill', 'Sam'], 'Name_2': ['Jim', 'Kyle'] } df = pd.DataFrame(raw_data) # 拆分原始行成两组数据,分别对应第一组Var/Name和第二组Var/Name group1 = df[['ID', 'Var', 'Name']] group2 = df[['ID', 'Var_2', 'Name_2']].rename(columns={'Var_2': 'Var', 'Name_2': 'Name'}) # 合并两组数据并排序 final_df = pd.concat([group1, group2]).sort_values(by='ID').reset_index(drop=True) print(final_df)
运行这段代码后,输出的结果就是我们想要的目标表格。如果是从Excel读取数据,把raw_data换成pd.read_excel("你的文件路径.xlsx")即可。
内容的提问来源于stack exchange,提问作者user3310334
相关产品推荐
相关产品推荐

