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

如何重构DataFrame,将标题与对应排名值进行映射转换

DataFrame行列转换与值映射实现方案

原DataFrame结构

import pandas as pd

df = pd.DataFrame({
    'Name': ['Name1', 'Name2', 'Name3', 'Name4'],
    'Rank1': ['Title1', 'Title3', 'Title2', 'Title4'],
    'Rank2': ['Title3', 'Title2', 'Title5', 'Title6'],
    'Rank3': ['Title7', 'Title6', 'Title3', 'Title1'],
    'Rank4': ['Title2', 'Title5', 'Title6', 'Title5'],
    'Rank5': ['Title6', 'Title4', 'Title4', 'Title2']
})

目标DataFrame结构

Name  Title1  Title2  Title3  Title4  Title5  Title6  Title7
0  Name1       1       4       2      10      10       5       3
1  Name2      10       2       1       4       4       3      10
2  Name3      10       1       3       5       2       4      10
3  Name4       3       5      10       1       4       2      10

实现代码

# 1. 将Rank列转为长格式,提取Rank数字作为对应分值
melted = df.melt(id_vars='Name', var_name='Rank', value_name='Title')
melted['Score'] = melted['Rank'].str.extract('(\d+)').astype(int)

# 2. 透视回宽格式,缺失值填充为10
pivoted = melted.pivot(index='Name', columns='Title', values='Score').fillna(10).reset_index()

# 3. 按Title序号排序列,保证和目标结构一致
sorted_titles = sorted(pivoted.columns[1:], key=lambda x: int(x.split('Title')[1]))
pivoted = pivoted[['Name'] + sorted_titles]

# 移除透视生成的列名层级
pivoted.columns.name = None

print(pivoted)

代码说明

  • melt转换:把原表的Rank1-Rank5列拆成每行一个Name-Rank-Title的组合,同时从Rank字段里提取数字作为该Title对应的排名分值。
  • 透视填充:将长格式数据转回宽表,以Name为索引、Title为列,没有出现过的Title用10填充。
  • 列排序:按Title后缀的数字对列重新排序,确保输出列顺序和目标匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:03:24