You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含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)

代码说明

  1. melt()函数:核心是将Target和Source列“融化”为行维度,同时保留CustomerNr和Percentage作为每行的关联标识,保证数据对应关系不丢失。
  2. 复合标识列生成:将CustomerNr转为字符串后与Scope(原字段名Target/Source)拼接,生成目标格式的CustomerNr Scope列。
  3. 列顺序调整:重新排列列的顺序,完全匹配需求的长表结构。

合适的问题标题

中文标题:《如何将Pandas宽表转换为包含客户编号+字段标识的长表格式?》
英文标题:《How to reshape a Pandas DataFrame into long format with combined customer ID and field labels?》

内容的提问来源于stack exchange,提问作者j_90

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 08:40:33