如何将含Target/Source列的Pandas DataFrame重塑为长表
如何将Pandas DataFrame从宽表转换为带复合标识的长表格式?
实现方法
可以使用Pandas的melt()函数完成宽表到长表的转换,再通过字符串拼接生成复合标识列,具体代码如下:
import pandas as pd import numpy as np # 初始化原DataFrame df = pd.DataFrame([[1001, 'A','C',0.2], [1004, 'D',np.nan,0.3],[1005, 'C','D',0.4], [1010, 'A','D',0.5]], columns=['CustomerNr','Target','Source','Percentage']) # 1. 宽表转长表 df_melted = df.melt( id_vars=['CustomerNr', 'Percentage'], # 保留的关联标识列 value_vars=['Target', 'Source'], # 需要转换为行的字段列 var_name='Scope', # 转换后的字段名列 value_name='Value' # 字段对应的值列 ) # 2. 生成复合标识列 df_melted['CustomerNr Scope'] = df_melted['CustomerNr'].astype(str) + ' ' + df_melted['Scope'] # 3. 调整列顺序并清理临时列 df_final = df_melted[['CustomerNr Scope', 'Value', 'Percentage']] # 输出结果 print(df_final)
代码说明
melt()函数:核心是将Target和Source列“融化”为行维度,同时保留CustomerNr和Percentage作为每行的关联标识,保证数据对应关系不丢失。- 复合标识列生成:将
CustomerNr转为字符串后与Scope(原字段名Target/Source)拼接,生成目标格式的CustomerNr Scope列。 - 列顺序调整:重新排列列的顺序,完全匹配需求的长表结构。
合适的问题标题
中文标题:《如何将Pandas宽表转换为包含客户编号+字段标识的长表格式?》
英文标题:《How to reshape a Pandas DataFrame into long format with combined customer ID and field labels?》
内容的提问来源于stack exchange,提问作者j_90
相关产品推荐
相关产品推荐

