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

如何基于CANDIDATE_ID列在Pandas中将多列转换为行

Pandas宽表转长表实现方案

场景说明

现有如下宽格式DataFrame:

CANDIDATE_IDjid 1type1score1jid 2type2score2
121A1003C300
132B2004D400

需要转换为长格式:

CANDIDATE_IDjidtypescore
121A100
123C300
132B200
134D400

实现方法

方法一:使用pd.wide_to_long(推荐,扩展性强)

该方法专门处理带编号后缀的宽表,适合后续可能新增更多组(如jid 3、type3)的场景:

import pandas as pd

# 构建测试数据
df = pd.DataFrame({
    'CANDIDATE_ID': [12, 13],
    'jid 1': [1, 2],
    'type1': ['A', 'B'],
    'score1': [100, 200],
    'jid 2': [3, 4],
    'type2': ['C', 'D'],
    'score2': [300, 400]
})

# 执行转换
result = pd.wide_to_long(
    df,
    stubnames=['jid ', 'type', 'score'],  # 列名前缀,注意`jid `带空格
    i='CANDIDATE_ID',  # 保留的主键列
    j='group',  # 临时生成的分组编号列
    sep=''  # 前缀与编号的分隔符,这里无明显分隔符,设为空
).reset_index()

# 调整列名和结构
result = result.rename(columns={'jid ': 'jid'}) \
               .drop('group', axis=1) \
               [['CANDIDATE_ID', 'jid', 'type', 'score']]

方法二:拆分合并(简单直观,适合少组数场景)

如果只有两组数据,直接拆分后合并更易懂:

import pandas as pd

# 构建测试数据
df = pd.DataFrame({
    'CANDIDATE_ID': [12, 13],
    'jid 1': [1, 2],
    'type1': ['A', 'B'],
    'score1': [100, 200],
    'jid 2': [3, 4],
    'type2': ['C', 'D'],
    'score2': [300, 400]
})

# 拆分两组数据并统一列名
df_group1 = df[['CANDIDATE_ID', 'jid 1', 'type1', 'score1']].rename(
    columns={'jid 1': 'jid', 'type1': 'type', 'score1': 'score'}
)
df_group2 = df[['CANDIDATE_ID', 'jid 2', 'type2', 'score2']].rename(
    columns={'jid 2': 'jid', 'type2': 'type', 'score2': 'score'}
)

# 合并结果
result = pd.concat([df_group1, df_group2], ignore_index=True)

结果验证

执行上述代码后,result即为目标格式的DataFrame:

CANDIDATE_ID  jid type  score
0            12    1    A    100
1            12    3    C    300
2            13    2    B    200
3            13    4    D    400

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:18:20