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
相关产品推荐
相关产品推荐

