python - Pandas:基于一个公共列组合两个不同形状的数据框
问题描述
我有一个df
列:
Student_id subject marks
1 English 70
1 math 90
1 science 60
1 social 80
2 English 90
2 math 50
2 science 70
2 social 40
我有另一个df1
列
Student_id Year_of_join column_with_info
1 2020 some_info1
1 2020 some_info2
1 2020 some_info3
2 2019 some_info4
2 2019 some_info5
我想组合上述两个数据框(.csv 文件),如下所示res_df
:
Student_id subject marks year_of_join column_with_info
1 English 70 2020 some_info1
1 math 90 2020 some_info2
1 science 60 2020 some_info3
1 social 80 NaN NaN
2 English 90 2019 some_info4
2 math 50 2019 some_info5
2 science 70 NaN NaN
2 social 40 NaN NaN
注意:
我想加入基于Student_id
s 的数据集。两者都具有相同的唯一 Student_id,但两个数据集的数据形状不同。
PS:生成的 dfres_df
只是组合两个数据帧后数据可能看起来如何的一个示例,它也可以是这样的:
Student_id subject marks year_of_join column_with_info
1 English 70 NaN NaN
1 math 90 2020 some_info1
1 science 60 2020 some_info2
1 social 80 2020 some_info3
2 English 90 NaN NaN
2 math 50 NaN NaN
2 science 70 2019 some_info4
2 social 40 2019 some_info5
在此先感谢您的帮助!请帮我解决这个问题..
解决方案
用于GroupBy.cumcount
与左连接合并的辅助列:
df['g'] = df.groupby('Student_id').cumcount()
df1['g'] = df1.groupby('Student_id').cumcount()
df = df.merge(df1, on=['Student_id','g'], how='left').drop('g', axis=1)
推荐阅读
- excel - excel匹配两个数组
- python - 什么是 Python 中的钻石问题,为什么它没有出现在 python2 中?
- c# - 在 ac# 程序中运行 sqlcmd 进程时在命令窗口中打印信息
- android - 错误“此版本中使用了已弃用的 Gradle 功能,使其与 Gradle 6.0 不兼容”当我执行 gradle lint 时
- firebase - Firestore 数据库规则适用于模拟器,但不适用于应用程序
- laravel - 是否可以在无法访问 ssh 的共享主机上开发正在运行的 laravel 网站
- python - 如何动态打开json文件?
- api - 与其他用户共享文件的端点的正确 URI 是什么?
- javascript - 如何更改 react-table.js 中的聚合计算
- eclipse - 如何在 JUnit 的 Eclipse 视图失败跟踪中换行