Python 创建具有最佳匹配查找的列
我试图找到一种有效的方法,在查找表中找到最佳匹配。所谓最佳匹配,我的意思是在查找表中为数据表中的值找到尽可能长的精确匹配 我的查找表包含值['A'、'A1'、'A12']。对于数据值['A','B','A1','A2','A12','A13','A123','A132'],结果应为['A','NaN','A1','A','A12','A1','A12','A1'] 下面的代码在上例中循环查找键1、2和3的所有可能长度,创建键_1作为列A的前n个字符,并在查找表中查找匹配项 这是可行的,但我相信有一个更优雅的解决方案 作为pd进口熊猫 lookup=pd.DataFrame{'Cat':['A','A1','A12']} 打印查找表:\n,查找,\n data=pd.DataFrame{'A':['A','B','A1','A2','A12','A13','A123','A132']} printData表:\n,数据,'\n--' key_length=lookup['Cat'].str.len.drop_duplicates.sort_values.values 键长度=[1] 对于键长中的c: 数据['key_1']=data['A'].str.0,c data=data.mergelookup,left_on=['key_1'],right_on=['Cat'],how='left' idx=数据['Cat']。不为空 data.loc[idx,'Category']=data.loc[idx,'Cat'] 数据。放置“Cat”,轴=1,在位=真 数据。删除“键1”,轴=1,位置=True 打印结果:\n,数据 代码的结果是Python 创建具有最佳匹配查找的列,python,pandas,Python,Pandas,我试图找到一种有效的方法,在查找表中找到最佳匹配。所谓最佳匹配,我的意思是在查找表中为数据表中的值找到尽可能长的精确匹配 我的查找表包含值['A'、'A1'、'A12']。对于数据值['A','B','A1','A2','A12','A13','A123','A132'],结果应为['A','NaN','A1','A','A12','A1','A12','A1'] 下面的代码在上例中循环查找键1、2和3的所有可能长度,创建键_1作为列A的前n个字符,并在查找表中查找匹配项 这是可行的,但我相信有
Lookup table:
Cat
0 A
1 A1
2 A12
Data table:
A
0 A
1 B
2 A1
3 A2
4 A12
5 A13
6 A123
7 A132
---
Result:
A Category
0 A A
1 B NaN
2 A1 A1
3 A2 A
4 A12 A12
5 A13 A1
6 A123 A12
7 A132 A1
非常感谢你的帮助 您需要按len从最长到最短对查找值列表进行排序,并将其连接到字符串模式“A12 | A1 | a”。最后,在此模式上使用str.extract
l = ['A', 'A1', 'A12']
l = sorted(l, key=len, reverse=True)
Out[239]: ['A12', 'A1', 'A']
p = '('+'|'.join(l)+')'
data['Category'] = data['A'].str.extract(p)
Out[255]:
A Category
0 A A
1 B NaN
2 A1 A1
3 A2 A
4 A12 A12
5 A13 A1
6 A123 A12
7 A132 A1