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

Pandas如何基于多索引将多行数据合并为单行

实现方法

直接用pd.pivot()无法同时完成「课程名+成绩」双字段的配对展开,你要的单行转换代码(含列名格式化,直接输出你要的目标结构)如下:

df_result = df.set_index(['FirstName','LastName', df.groupby(['FirstName','LastName']).cumcount()+1]).unstack().sort_index(axis=1, level=1).pipe(lambda x: x.set_axis([f'{col}{seq}' for col, seq in x.columns], axis=1)).reset_index()

逻辑说明

  • 先按FirstName+LastName对学生分组,给同一名学生的所有课程按原始顺序生成从1开始的序号
  • 将姓名、课程序号设为索引后,通过unstack()把不同序号对应的课程名、成绩横向展开为列
  • 按课程序号层级排序,保证同序号的CourseName和CourseGrade相邻,不会出现列错位
  • 最后把多层列名拼接为CourseName1/CourseGrade1这类目标命名,重置索引后就得到结果

用你提供的样例数据运行,输出完全匹配预期:

FirstName LastName CourseName1 CourseGrade1 CourseName2 CourseGrade2
0    Joseph    Hanso       CS101           A+       CS102            D

如果不需要提前格式化列名,仅获取核心宽表结构可以用更短的版本:

df_result = df.set_index(['FirstName','LastName', df.groupby(['FirstName','LastName']).cumcount()+1]).unstack().sort_index(axis=1, level=1).reset_index()

内容的提问来源于stack exchange,提问作者Mohamed Taher Alrefaie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:48:28