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

同一DataFrame内列映射:如何将重复列数据转换为指定格式?

更简便的一次性处理方案

当然有比拆分再合并更高效的方法!我们可以借助pandas的数据重塑工具,把重复列的结构一次性转换成目标格式,步骤非常清晰:

步骤1:识别并配对重复列

因为Python自动给重复的Students列加上了.1、.2后缀,我们可以循环遍历每一组(Students, ScoreN)列,把它们提取出来统一列名,并标记对应的分数类型(比如Score1、Score2):

import pandas as pd

# 先假设你的原始DataFrame是df
dfs_list = []
# 遍历3组学生-分数列
for idx in range(3):
    # 确定当前组的学生列和分数列名
    student_col = "Students" if idx == 0 else f"Students.{idx}"
    score_col = f"Score{idx+1}"
    
    # 提取当前组的两列,重命名为统一的列名,并标记分数类型
    temp_df = df[[student_col, score_col]].rename(columns={student_col: "Students", score_col: "Score"})
    temp_df["Score_Type"] = score_col
    
    dfs_list.append(temp_df)

步骤2:合并成长格式DataFrame

把所有分组的小DataFrame合并成一个长格式的表,这样每个行就对应一个学生的某一项分数:

long_format_df = pd.concat(dfs_list, ignore_index=True)

步骤3:透视转成目标宽格式

用pivot_table(或者pivot)把长格式转成我们需要的宽格式,每个学生一行,三个分数列对应各自的数值:

result_df = long_format_df.pivot_table(
    index="Students",
    columns="Score_Type",
    values="Score",
    aggfunc="first"  # 因为每个学生每个分数只有一个值,用first即可
).reset_index()

# 去掉列名的层级,让格式更干净
result_df.columns.name = None

运行完这些代码,你就能直接得到目标格式的DataFrame啦!这种方法不需要手动拆分再合并,逻辑更清晰,也更容易维护,如果以后有更多的Score列,只需要修改循环的次数就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:24:34