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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:48:11