如何将多列数据合并为单列(附示例数据集)
如何将多列数据合并为单列(附示例数据集)
嘿,我懂你想把分散在多列的数据整合到同一列,还得保留对应的客户信息对吧?先看看你的原始数据集:
原始数据集
| Customer | Col1 | Col2 | Col3 |
|---|---|---|---|
| Bob | 111 | 2221 | |
| Michael | 112 | ||
| Anna | 113 | 2223 | |
| Rachel | 114 | 2224 | 334 |
| Person5 | 115 |
你想要的最终效果是这样的:
目标结果
| Customer | Col1 |
|---|---|
| Bob | 111 |
| Bob | 2221 |
| Michael | 112 |
| Anna | 113 |
| Anna | 2223 |
| Rachel | 114 |
| Rachel | 2224 |
| Rachel | 334 |
接下来给你几个常用工具的实现方法,按需选就行:
方法一:用Excel实现
这个操作叫「逆透视」,Excel里有现成功能:
- 选中整个原始数据区域(包括表头)
- 点击数据选项卡,找到从表格/区域(旧版本Excel可能需要用Power Query或数据透视表)
- 在Power Query编辑器里,选中
Customer列,右键选择逆透视其他列 - 把生成的
Value列重命名为Col1,关闭并加载数据,就能得到目标结果啦
方法二:用Python Pandas实现
用代码处理的话,Pandas的melt函数刚好能搞定:
import pandas as pd # 构造原始数据集(实际场景可替换为读取文件) df = pd.DataFrame({ 'Customer': ['Bob', 'Michael', 'Anna', 'Rachel', 'Person5'], 'Col1': [111, 112, 113, 114, 115], 'Col2': [2221, None, 2223, 2224, None], 'Col3': [None, None, None, 334, None] }) # 执行逆透视并过滤空值 result = df.melt(id_vars='Customer', value_vars=['Col1', 'Col2', 'Col3'], value_name='Col1') result = result.dropna(subset=['Col1']).drop(columns='variable').reset_index(drop=True) print(result)
运行后就能得到你要的格式。
方法三:用SQL实现
如果是在数据库里处理,用UNION ALL拼接即可:
SELECT Customer, Col1 AS Col1 FROM your_table WHERE Col1 IS NOT NULL UNION ALL SELECT Customer, Col2 AS Col1 FROM your_table WHERE Col2 IS NOT NULL UNION ALL SELECT Customer, Col3 AS Col1 FROM your_table WHERE Col3 IS NOT NULL ORDER BY Customer;
记得把your_table换成你实际的表名,这条语句会把每列的非空数据拼接到同一列,同时对应好客户名。
备注:内容来源于stack exchange,提问作者Beef_tataki12




