python如何筛选具有多列值相同的两个dataframe

0. Problem

这个问题类似于,现在有2个表,一个是StudentScore表,一个是StudentInfo,分别记录了学生的[‘学号’,‘姓名’,‘科目’,‘成绩’]以及[‘学号’,‘姓名’],因此我需要从第2个记录了学生基本信息的表,在第1个表中进行多列匹配,而且第一个df中,具有同样[‘学号’,‘姓名’]的index可能有多个。

1. Solutions

1.1 走过的弯路

一开始绞尽脑汁,想先提取出来index,然后根据index去取值。用了isin,也用了循环一个一个比较,但是找不到一个简洁的方法。所以换了一下思路,去描述这个“多值匹配”问题,我想找的无非是两个表的“共同点”在第一个表中的“体现/映射/投影”,不是必须非得有index才能做这件事。

1.2 改用merge

merge函数天然的包括了找“共同点”以及“体现/映射/投影”。通过设置merge的参数,可以实现“多列匹配”的需求。

关于merge的参数有一个博客讲解的很好:
https://blog.csdn.net/weixin_42512684/article/details/107461520

因此代码如下:

features = ['StuID','StuName']
ans = pd.merge(StudentScore,StudentInfo,how="inner",on=features)

注意how

合并方式,一共四种: left,right,inner,outer,默认为 inner
left 仅使用来自左边frame的键进行匹配;
right 仅使用来自右边frame 的键进行匹配;
outer 取来自左右frame 键的并集;匹配不到的话元素设为Null
inner 取来自左右frame 键的交集,匹配不到的话元素丢失;


欢迎分享其他优雅Solutions~

你可能感兴趣的:(python,python)