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')

再次感谢!你是救命恩人!