如何将ID关联的多组P/Q列数据转换为多行合并结构?
宽表转长表:拆分P/Q列并按ID生成多行记录
下面给你几种常用的实现方式,按需选择:
方法1:Excel Power Query(非编程用户首选)
操作步骤很直观:
- 选中原始数据区域,点击「数据」选项卡 → 「从表格/区域」,导入Power Query编辑器
- 选中
ID列,点击「转换」选项卡 → 「逆透视列」→ 「逆透视其他列」,此时会生成Attribute(原列名)和Value(对应值)两列 - 添加自定义列:用公式提取原列名的前缀和后缀,生成
A列(比如= "PQ" & Text.End([Attribute], 1)) - 再次调整结构:选中
ID、A列,点击「转换」→ 「透视列」,值列选Value,列名选从原列名提取的前缀(P/Q) - 最后关闭并上载,就能得到目标格式的表格
方法2:Python Pandas(编程用户适用)
用代码批量处理更高效,示例如下:
import pandas as pd # 构造原始数据(实际场景可替换为pd.read_excel/pd.read_csv读取数据) df = pd.DataFrame({ 'ID': [1, 2, 3], 'P1': [1, 10, 1], 'P2': [2, 20, 2], 'P3': [3, 30, 30], 'Q1': [4, 40, 400], 'Q2': [5, 50, 50], 'Q3': [6, 60, 60] }) # 宽表转长表,拆分列名的前缀和后缀 melted_df = df.melt(id_vars='ID', var_name='col', value_name='val') melted_df['prefix'] = melted_df['col'].str[0] melted_df['suffix'] = melted_df['col'].str[1] # 透视重组P/Q列,生成最终结果 result_df = melted_df.pivot_table( index=['ID', 'suffix'], columns='prefix', values='val', aggfunc='first' ).reset_index() result_df['A'] = 'PQ' + result_df['suffix'] result_df = result_df[['ID', 'A', 'P', 'Q']] print(result_df)
方法3:SQL(数据库场景使用)
如果数据存储在数据库中,直接用UNION ALL拆分每组Pn/Qn即可:
SELECT ID, 'PQ1' AS A, P1 AS P, Q1 AS Q FROM your_table UNION ALL SELECT ID, 'PQ2' AS A, P2 AS P, Q2 AS Q FROM your_table UNION ALL SELECT ID, 'PQ3' AS A, P3 AS P, Q3 AS Q FROM your_table ORDER BY ID, A;
内容的提问来源于stack exchange,提问作者Neeko
相关产品推荐
相关产品推荐

