python - 从多个数据表创建具有多对多关系的数据表
问题描述
我希望我的问题首先有意义。
所以我有几个 csv 文件,我想将它们合并到一个 DataFrame 中,每个 DataFrame 的结构都相似,每年都会在一个对象上记录一个特定的指标。每个 DataFrame 都由某个类别分隔。
例如,简化版本是每个班级的学生成绩:
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
我的尝试是像这样创建一个新的空 DataFrame:
import pandas as pd
combinedDf = pd.DataFrame({'Year':[], 'Student':[], 'Math':[], 'Science':[], 'English':[]})
然后尝试手动迭代每个数据帧,循环遍历每一行并将数据附加到组合Df。因此,对于 Math 表,我必须为 Science 和 English 值添加 None 和 None,直到我在相关数据框中迭代这些值,以便我可以将它们插入到我的 combineDf 中。这很快就变得非常令人沮丧,因为有时其中一张桌子缺少一年或一名学生。
所以我的问题是:有没有更简单的方法来合并这些 DataFrames?我想它不应该这么复杂,但我似乎找不到更简单的方法来解决它。
谢谢
解决方案
你可以concat
试试stack
s=pd.concat([df1,df2,df3],keys=['math','scie','his']).\
set_index('Year',append=True).stack().unstack(level=0).reset_index()
推荐阅读
- ajax - 我对 laravel 中的 ajax 请求有疑问
- android - 添加菜单栏时出错(缺少 com.android.support:appcompat-v7:30 的类)
- javascript - 使用 html 中的 url 从远程服务器播放视频
- python - Python 3如何将2个字符合二为一
- java - 进行拓扑排序时数组越界异常
- python - 样本协方差的特征值远离协方差的特征值
- pycharm - 从终端消息错误到文件的 Pycharm 链接
- html - Rails 和 Font Awesome 不起作用?图标不显示
- vue.js - 在 vue 中更新组件中的初始值
- python-3.x - EOFError:读取一行时出现EOF