2024-04-29 08:37:23 发布
网友
我需要根据以下列表从每行中提取最后一个字符:
lst = [ '-ae-' , '-ap-' , '-vn-' , '-au-' , '-aw-' , '-be-' , '-bp-' , '-br-' , '-dz-' ]
这里是df['CN']的示例:
df['CN']
我用了这个代码:
我需要返回列表中最后一个元素:
1: -vn- 2: -bp- 3: -bp-
但是我的代码返回了每行交叉的第一个元素:
1: -ap- 2: -br- 3: -au-
Pandas方式,使用^{}和^{}:
pat=r'(?=({}))'.format('|'.join(re.escape(x) for x in lst))# @thanks Amadan #'(?=(\\-ae\\-|\\-ap\\-|\\-vn\\-|\\-au\\-|\\-aw\\-|\\-be\\-|\\-bp\\-|\\-br\\-|\\-dz\\-))' df['CN'].str.findall(pat).str[-1]
使用np.in1d
l = [i.replace('-','') for i in lst] df['CN'].apply(lambda x: '-'+ np.array(l)[np.in1d(l,x.split('-'))][-1] + '-')
输出
使用rfind查找最右边的匹配项。使用max查找最右边的出现。此代码假定至少会找到一个lst成员;如果找不到,它仍将返回一个lst成员。在
rfind
max
lst
def param(df): lst = ['-ae-','-ap-','-vn-','-au-','-aw-','-be-','-bp-','-br-', '-dz-'] return max(lst, key=lambda x: rfind(df, x))
这较长,但在有意义时将返回None:
None
Pandas方式,使用^{} 和^{} :
^{pr2}$
使用np.in1d
输出
^{pr2}$使用
rfind
查找最右边的匹配项。使用max
查找最右边的出现。此代码假定至少会找到一个lst
成员;如果找不到,它仍将返回一个lst
成员。在这较长,但在有意义时将返回
^{pr2}$None
:相关问题 更多 >
编程相关推荐