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

如何在Python中基于Student ID合并/堆叠多份纵向学校数据集?

纵向学校数据合并解决方案

问题1:合并"test scores"子集的年度文件

假设你的四个年度文件命名规则为test_scores_2016.csv、test_scores_2017.csv、test_scores_2018.csv、test_scores_2019.csv,可以用pandas按以下步骤合并:

  1. 导入依赖库
import pandas as pd
import os
  1. 遍历年度文件,添加年份列并收集数据
# 定义年份列表和文件路径(根据你的实际路径调整)
years = [2016, 2017, 2018, 2019]
data_dir = "./test_scores_data/"  # 你的文件所在目录

test_scores_list = []
for year in years:
    # 拼接文件路径
    file_path = os.path.join(data_dir, f"test_scores_{year}.csv")
    # 读取文件
    df = pd.read_csv(file_path)
    # 添加Year列,标记当前文件对应的年份
    df["Year"] = year
    # 将当前年度数据加入列表
    test_scores_list.append(df)

# 堆叠合并所有年度数据
merged_test_scores = pd.concat(test_scores_list, ignore_index=True)

执行后会得到按Student ID和Year堆叠的数据集,每个学生的各年度考试成绩按行排列。


问题2:合并"achievement"子集的grade level字段

假设achievement子集的文件为achievement_data.csv,分两种场景处理:

场景1:grade level是学生固定属性(不随年度变化)

直接基于Student ID关联合并:

# 读取achievement数据
achievement_df = pd.read_csv("./achievement_data.csv")
# 合并数据集,保留test_scores的所有行,匹配不到的grade level会显示NaN
final_df = pd.merge(merged_test_scores, achievement_df, on="Student ID", how="left")

场景2:grade level随年度变化(每个学生每年对应不同年级)

先按问题1的方法合并achievement的年度文件(添加Year列),再基于Student ID+Year双字段关联:

# 先合并achievement的年度文件
achievement_list = []
for year in years:
    file_path = os.path.join("./achievement_data/", f"achievement_{year}.csv")
    df = pd.read_csv(file_path)
    df["Year"] = year
    achievement_list.append(df)
merged_achievement = pd.concat(achievement_list, ignore_index=True)

# 双字段关联合并
final_df = pd.merge(merged_test_scores, merged_achievement, on=["Student ID", "Year"], how="left")

合并完成后,数据集会包含Student ID、Year、Test Score、grade level等所有目标字段。


内容的提问来源于stack exchange,提问作者Johnn-1231

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:32:42