pandas 如何在Python中基于标识变量将多个数据集(追加或合并)合并为一个数据集?

zujrkrfu  于 2023-04-18  发布在  Python
关注(0)|答案(1)|浏览(107)

在Python中,我使用纵向学校数据,有6个数据子集,每个子集都有相同的4年学校数据(4个文件)和相同的学生。每个子集代表不同的东西,如标准化考试成绩,出勤数据等。
我想做的是将它们合并到一个大文件中,其中每个学生ID最好按年份堆叠,并具有来自所有子集的列。例如,假设学生ID号为123456,我希望大数据集看起来像这样:
学生证年考试成绩缺课天数...
123456 2016 97 10
123456 2017 91 14
123456 2018 94 16
假设其中一个子集被称为“考试成绩”,其中有4个文件名为2016,2017,2018和2019。我如何将这4个文件合并在一起,以便它们根据每个学年的学生ID号堆叠,就像上面一样?
在我合并了这个子集的文件之后,假设还有一个子集叫做“成就”,它是教师对学生的评价。其中一个变量是相同的学生id,另一个变量叫做等级。我该如何将基于学生ID号的年级列合并到合并的考试成绩文件中,以便考试成绩合并数据集中的学生现在具有与之相关的等级
谢谢!

46scxncf

46scxncf1#

IIUC,您需要组合concat/merge

import pandas as pd
    
scores = (pd.concat([pd.read_csv(f"test_scores_{year}.csv") # make sure the adjust the years
                     for year in range(2016, 2020)]).sort_values(["Student ID", "Year"]))

achv = pd.read_csv("achievement.csv")

out = scores.merge(achv[["Student ID", "Grade Level"]],
                   on="Student ID", how="left") # make sure to adjust the column names

out.to_csv("TestScore_&_Achievements.csv", index=False)

输出:

Student ID  Year  Test Score  Days Absent  Grade Level
0       123456  2016          97           10            8
1       123456  2017          91           14            8
2       123456  2018          94           16            8
..         ...   ...         ...          ...          ...
17      678901  2017          95            3            8
18      678901  2018          97            1            8
19      678901  2019          95            2            8

[20 rows x 5 columns]

相关问题