检查pandas数据框中每一行的多个值



我被这个问题卡住了。我正在尝试根据位置分配优先级分数。如果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

最新更新