从多个数据表创建具有多对多关系的数据表



我希望我的问题首先有意义。

所以我有几个 csv 文件,我想将它们合并到一个数据帧中,每个数据帧的结构都相似,每年在对象上记录某个指标。每个数据帧由特定类别分隔。

例如,简化版本是每个班级的学生成绩:

DF1: Math
Year . Student1 . Student2  ... Student500 . Student501
2001 .   90     .    84     ...     92     .     65
2002 .   84     .    62     ...     70     .    100
...
2020 .   75     .    43     ...     50      .    83


DF2: Science
Year . Student1 . Student2  ... Student500 . Student501
2001 .   56     .    70     ...     82     .     99
2002 .   76     .    55     ...     70     .     80
...
2020 .   75     .    43     ...     50      .    83

DF3: History
Year . Student1 . Student2  ... Student500 . Student501
2001 .   90     .    84     ...     92     .     65
2002 .   84     .    62     ...     70     .    100
...
2020 .   75     .    43     ...     50      .    83

我希望将这些数据帧合并为一个具有以下结构的数据帧

Year  .  Student  .  Math  .  Science  . English

我的尝试是创建一个新的空数据帧,如下所示:

import pandas as pd
combinedDf = pd.DataFrame({'Year':[], 'Student':[], 'Math':[], 'Science':[], 'English':[]})

然后尝试手动迭代每个数据帧,循环遍历每一行并将数据追加到组合的 Df。因此,对于数学表,我必须为科学和英语值添加 None 和 None,直到我在相关数据帧中迭代这些值,以便我可以将它们插入到我的组合 Df 中。这很快就变得非常令人沮丧,因为有时一年或学生从其中一张桌子上失踪。

所以我的问题是:有没有更简单的方法来合并这些数据帧?我想它不应该这么复杂,但我似乎找不到更简单的方法来解决它。

谢谢

你可以尝试concatstack

s=pd.concat([df1,df2,df3],keys=['math','scie','his']).
set_index('Year',append=True).stack().unstack(level=0).reset_index()

最新更新