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

pandas中如何合并两个DataFrame生成以学生ID为行的宽格式表

实现思路

  • 第一步:将第二张学生长表转换为宽表,以Student和school作为行标识,variable列的取值作为新列名,对应指标值填充到对应列中
  • 第二步:将转换后的学生宽表与第一张学校表按school列关联合并,得到最终结果

代码实现示例

import pandas as pd

# 预设df1为65行的学校表,df2为12177行的学生长表
# 1. 学生长表转宽表
student_wide = df2.pivot(
    index=['Student', 'school'], 
    columns='variable',
    values='value' # 此处替换为df2中存储指标值的实际列名
).reset_index() 

# 2. 关联学校表(如果不需要学校表中school以外的其他字段,可跳过这一步)
final_df = pd.merge(
    left=student_wide,
    right=df1,
    on='school',
    how='left' # 保留所有学生记录,无匹配学校信息时字段为空
)

# 可选:调整列名匹配目标格式
final_df = final_df.rename(columns={
    'school': 'School',
    'intake': 'Intake',
    'vr': 'Vr'
})

注意事项

如果df2中存在同一个学生同一个variable对应多条记录的情况,pivot会报错,可先做聚合去重再转宽表,示例如下:

# 按三个维度分组,取第一条记录作为有效值,也可根据需求换成mean、max等聚合逻辑
df2_agg = df2.groupby(['Student', 'school', 'variable'])['value'].first().reset_index()
# 再用df2_agg执行上述pivot操作即可

内容的提问来源于stack exchange,提问作者Silvio sjsj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:09:03