Python 如何合并两个数据帧并仅返回匹配的行/索引
我有两个数据框,Python 如何合并两个数据帧并仅返回匹配的行/索引,python,pandas,Python,Pandas,我有两个数据框,入学和奖学金,有以下列-学生ID,年龄,大陆,性别,gpa 我想做以下工作: (一) 将入学表中的性别和gpa值追加到奖学金表中的相应行,从而仅返回匹配行(索引号) (二) 必要时,删除或避免结果列中的x和y标记age\u x,continent\u x admissions studentid, age,continent,sex,gpa 1, 10910, 18, Asia, F, 3.9 2, 10014, 19, Europe, M, 3.8 3, 10121,
入学
和奖学金
,有以下列-学生ID
,年龄
,大陆
,性别
,gpa
我想做以下工作:
(一) 将入学
表中的性别
和gpa
值追加到奖学金
表中的相应行,从而仅返回匹配行(索引号)
(二) 必要时,删除或避免结果列中的x
和y
标记age\u x
,continent\u x
admissions
studentid, age,continent,sex,gpa
1, 10910, 18, Asia, F, 3.9
2, 10014, 19, Europe, M, 3.8
3, 10121, 18, Africa, M, 3.9
4, 10333, 20, Asia, F, 4.0
5, 10215, 19, America, F, 3.8
预期结果
scholarship_admissions
# take note of the index number
studentid, age,continent,sex,gpa
1, 10910, 18, Asia, F, 3.9
3, 10121, 18, Africa, M, 3.9
4, 10333, 20, Asia, F, 4.0
我的尝试
Import pandas as pd
scholarship_admissions = pd.merge(admissions,scholarship,on = ‘studentid’,how = ‘inner’)
谢谢您的尝试看起来已经不错了,您可以将列表作为合并键提供,这样可以避免重复列
scholarship_admissions = admissions.merge(scholarship, left_on=["studentid", "age", "continent"], right_on=["studentid", "age", "continent"], how='inner')
输出:
studentid age continent sex gpa
0 10910 18 Asia F 3.9
1 10121 18 Africa M 3.9
2 10333 20 Asia F 4.0
studentid age continent sex gpa
index
0 10910 18 Asia F 3.9
2 10121 18 Africa M 3.9
3 10333 20 Asia F 4.0
为了保留原始索引,可以将其添加为列,并在合并后重新应用
scholarship_admissions_with_index = admissions.reset_index().merge(scholarship, left_on=["studentid", "age", "continent"], right_on=["studentid", "age", "continent"], how='inner').set_index('index')
输出:
studentid age continent sex gpa
0 10910 18 Asia F 3.9
1 10121 18 Africa M 3.9
2 10333 20 Asia F 4.0
studentid age continent sex gpa
index
0 10910 18 Asia F 3.9
2 10121 18 Africa M 3.9
3 10333 20 Asia F 4.0
在这种特定情况下,您可以在上使用,而不是在上指定left\u和right\u,因为两个数据帧中的列名称相同
admissions.merge(scholarship, on=["studentid", "age", "continent"], how='inner')
再次感谢!你是救命恩人!