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

如何合并两个关联DataFrame,使每位教师对应学生列表?

如何创建每位教师对应学生列表的DataFrame?

要实现每位教师对应一个学生列表的DataFrame,你可以用Pandas的分组和合并功能来完成,具体步骤如下:

步骤1:分组处理学生数据

先把学生表按教师姓名分组,将每个教师名下的所有学生数据转换成字典列表(每个字典代表一名学生的完整信息):

student_groups = student_df.groupby('teacher').apply(lambda x: x.to_dict('records')).reset_index(name='students')

步骤2:合并教师表与分组后的学生表

用左连接把教师表和分组后的学生表合并,确保所有教师都被保留(包括没有学生的教师),之后清理多余列并把空值替换为空列表:

# 合并两张表,按教师姓名匹配
result_df = teacher_df.merge(student_groups, left_on='name', right_on='teacher', how='left')
# 删除重复的teacher列
result_df = result_df.drop('teacher', axis=1)
# 给没有学生的教师填充空列表
result_df['students'] = result_df['students'].fillna([])

完整示例代码

如果你的数据还没定义,可以用下面的完整代码测试:

import pandas as pd

# 构造教师DataFrame
teacher_data = {
    'name': ['Pep Guardiola', 'Jurgen Klopp', 'Mikel Arteta', 'Zinadine Zidane'],
    'married': [True, True, False, True],
    'school': ['Manchester High School', 'Liverpool High School', 'Arsenal High', pd.NA]
}
teacher_df = pd.DataFrame(teacher_data)

# 构造学生DataFrame
student_data = {
    'teacher': ['Mikel Arteta', 'Mikel Arteta', 'Pep Guardiola', 'Jurgen Klopp', 'Jurgen Klopp', 'Jurgen Klopp', 'Pep Guardiola', 'Pep Guardiola', 'Mikel Arteta'],
    'name': ['Bukayo Saka', 'Gabriel Martinelli', 'Jack Grealish', 'Roberto Firmino', 'Andrew Robertson', 'Darwin Nunez', 'Ederson Moraes', 'Manuel Akanji', 'Thomas Partey'],
    'age': [21, 21, 27, 31, 28, 23, 29, 27, 29],
    'height': ['2.1m']*9,
    'weight': ['80kg', '75kg', '80kg', '65kg', '70kg', '75kg', '90kg', '80kg', '80kg']
}
student_df = pd.DataFrame(student_data)

# 分组处理学生数据
student_groups = student_df.groupby('teacher').apply(lambda x: x.to_dict('records')).reset_index(name='students')

# 合并并整理结果
result_df = teacher_df.merge(student_groups, left_on='name', right_on='teacher', how='left').drop('teacher', axis=1)
result_df['students'] = result_df['students'].fillna([])

# 打印结果
print(result_df)

输出结果

运行后会得到这样的DataFrame:

name  married                  school                                           students
0    Pep Guardiola     True  Manchester High School  [{'teacher': 'Pep Guardiola', 'name': 'Jack Gr...
1     Jurgen Klopp     True   Liverpool High School  [{'teacher': 'Jurgen Klopp', 'name': 'Roberto ...
2     Mikel Arteta    False            Arsenal High  [{'teacher': 'Mikel Arteta', 'name': 'Bukayo S...
3  Zinadine Zidane     True                     <NA>                                                 []

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:55:36