如何用Pandas合并Student对象的DataFrame并生成嵌套表格?
问题描述
我在Python中创建了多个名为Student的对象,每个对象包含age、name、gender等属性,还带有存储该学生当年考试成绩的DataFrame(grades)。相关Python代码如下:
import pandas as pd class Student: def __init__(self, age, name, gender, dataframe): self.age = age self.name = name self.gender = gender self.grades = dataframe ...
单个学生的成绩DataFrame结构:
包含「科目」和「成绩」列,行数据示例:语文 | 90、数学 | 85、英语 | 92
期望生成的嵌套表格结构:
以学生个人信息(姓名、年龄、性别)为上层分组,对应展示该学生的各科成绩,形成类似嵌套分组的表格样式
我希望合并这些DataFrame,同时不丢失学生的个人信息,请问如何用Pandas实现该需求?
解决方案
可以通过「添加个人信息列→合并DataFrame→构建嵌套结构」三步实现:
具体步骤与代码示例
假设所有Student对象都存放在列表students中:
import pandas as pd # 模拟创建示例Student对象(实际场景替换为你的对象列表) df1 = pd.DataFrame({"科目": ["语文", "数学", "英语"], "成绩": [90, 85, 92]}) df2 = pd.DataFrame({"科目": ["语文", "数学", "英语"], "成绩": [88, 91, 87]}) student1 = Student(18, "张三", "男", df1) student2 = Student(17, "李四", "女", df2) students = [student1, student2] # 1. 为每个学生的成绩表添加个人信息列 processed_dfs = [] for stu in students: grade_df = stu.grades.copy() # 复制原表避免修改原始数据 grade_df["姓名"] = stu.name grade_df["年龄"] = stu.age grade_df["性别"] = stu.gender processed_dfs.append(grade_df) # 2. 合并所有处理后的DataFrame combined_df = pd.concat(processed_dfs, ignore_index=True) # 3. 构建嵌套表格样式(两种可选方式) # 方式1:行多级索引结构 nested_row_df = combined_df.set_index(["姓名", "年龄", "性别", "科目"]) print(nested_row_df) # 方式2:列分组结构(更贴近目标视觉效果) nested_col_df = combined_df.pivot(index=["姓名", "年龄", "性别"], columns="科目", values="成绩").reset_index() print(nested_col_df)
效果说明
- 方式1生成行多级索引:每一行对应一个学生的单科目成绩,上层索引为学生个人信息,下层为科目,适合按学生+科目维度查看数据。
- 方式2生成列分组结构:每个学生占一行,各科成绩作为列展示,视觉上更接近目标的嵌套表格样式,适合整体查看学生的成绩汇总。
内容的提问来源于stack exchange,提问作者FunPlus
相关产品推荐
相关产品推荐

