题目
给定两个DataFrame,第一个D1是大学的全称,第二个D2是大学的缩写,如果D2里面有D1大学的缩写,就在对应的D1后面加一个“yes”。
例:
D1
D2
最后实现结果
要求
用一行代码实现上述功能
实现方法
- 暴力解法
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
- 一行代码实现
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 版权协议,转载请附上原文出处链接和本声明。