如何在pandas数据帧中构建按字母顺序排列的单词

时间:2018-04-09 10:32:46

标签: python pandas

这是我的数据

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

2 个答案:

答案 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