我被这个问题卡住了。我正在尝试根据位置分配优先级分数。如果location列包含Beirut或Saida,优先级得分=1。如果location列中包含Baalbeck或Sour,则优先级得分=2。否则优先级得分=3。问题是位置行可以包含多个位置。
Dataframe例子:
商业位置x贝鲁特,群起革命y赛达、酸z Baalbeck的黎波里的黎波里d .
所需输出:
Business Location. Score
X. Beirut,Aley. 1
Y. Saida,Sour. 1
Z. Baalbeck,Tripoli 2
D. Tripoli. 3
我试图在位置列中使用str.contains,但它不起作用。
为了有一个泛型方法,我将使用一个单词字典和一个正则表达式匹配:
priority = {1: ['Beirut', 'Saida'], 2: ['Baalbeck', 'Sour']}
import re
import numpy as np
patterns = {'|'.join(map(re.escape, l)): i for i, l in priority.items()}
# {'Beirut|Saida': 1, 'Baalbeck|Sour': 2}
df['Score'] = np.select([df['Location'].str.contains(pat, case=False)
for pat in patterns],
patterns.values(), 3)
print(df)
输出:
Business Location Score
0 X. Beirut,Aley. 1
1 Y. Saida,Sour. 1
2 Z. Baalbeck,Tripoli 2
3 D. Tripoli. 3