这是我的数据
No Number
1. Abe
2. Edab
这是我的预期
No Number Score
1. Abe 9
2. Edab 12
这是因为:
a=1, b=2, e=5
,所以Abe = a + b + e = 8
e=5, d=4, a=1, b=2
所以Edab = e + d + a + b = 12
我希望评分规则为a= 1
,...,z =26
答案 0 :(得分:3)
使用ord
表示嵌套列表理解中使用sum
的Unicode代码点的整数:
df['Score'] = [sum([ord(char.lower()) - 96 for char in x]) for x in df['Number']]
print (df)
No Number Score
0 1.0 Abe 8
1 2.0 Edab 12
如果只想使用a-z
值:
df['Score'] = [sum([ord(char.lower()) - 96 for char in x])
for x in df['Number'].str.extract('([a-zA-Z]+)', expand=False)]
谢谢@Jon Clements对解决方案的另一个修改:
df['Score']=df.Number.str.lower().str.extractall('([a-z])')[0].apply(ord).sub(96).sum(level=0)
答案 1 :(得分:3)
一点点view
魔法。
v = df.Number.str.lower().values.astype(str).view(np.int32).reshape(len(df), -1) - 96
v[v < 0] = 0
df['Score'] = v.sum(axis=1)
df
No Number Score
0 1.0 Abe 8
1 2.0 Edab 12