pandas 两个DataFrame带条件匹配

  • Post author:
  • Post category:其他

题目

给定两个DataFrame,第一个D1是大学的全称,第二个D2是大学的缩写,如果D2里面有D1大学的缩写,就在对应的D1后面加一个“yes”。
例:
D1
在这里插入图片描述
D2
在这里插入图片描述

最后实现结果
在这里插入图片描述

要求

用一行代码实现上述功能

实现方法

  1. 暴力解法
import pandas as pd
import re

# for example
d1 = pd.DataFrame(['上海大学', '上海理工大学', '华东师范大学'], columns=['school'])
d2 = pd.DataFrame(['上理工','上交大','华师大'],columns=['abb'])

# add a column, set values 'no'
d1['name'] = ['no' for i in range(d1.shape[0])]

# loop d1
for i in range(d1.shape[0]): 
    # loop d2
    for k in range(d2.shape[0]):
        # transform d2 to re  
        s = '' 
        r = d2.iloc[k,0]
        for j in range(len(r)):
            s += r[j]
            s += '.{0,}'
            
        if len(re.findall(s,d1.iloc[i,0])) !=0:
            d1.loc[i,'name'] = 'yes'
            break
  1. 一行代码实现
d1['name'] = np.where(d1['school'].apply(lambda y: any(re.search(x,y) for x in d2['abb'].apply(lambda x:'.*'.join(list(x))))),'YES','NO')

版权声明:本文为weixin_43434305原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。