如何在python中基于列表值拆分数据和concat?

2024-04-27 23:05:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要根据列表分割数据和映射值

df

Id      String
1       JHA PQR 20 STO KJAN
2       LKS JHA PLA; NIYM
3       LMA\KHA 20 HYS,KNSN
4       JHA, PQR STO 20 KJAM
5       JHA PQR|STO/KJAOP

List_to_map = [JHA, LMA, STO, PQR, LKS]

df_output

Id      String                 Values
1       JHA PQR 20 STO KJAN    JHA+PQR+STO
2       LKS JHA PLA; NIYM      LKS+JHA
3       LMA\KHA 20 HYS,KNSN    LMA
4       JHA, PQR STO 20 KJAM   JHA+PQR+STO
5       JHA PQR|STO/KJAOP      JHA+PQR+STO

我需要将列字符串值映射到列表,如果列表中存在这些值,则需要将这些值合并并创建一个新列


Tags: iddf列表stringplalmastopqr
2条回答

您可以使用^{}使用regex \W对非单词字符进行拆分,然后通过^{}获得List_to_map的公共元素。最后,使用^{}将匹配字符串与+连接起来,如下所示:

import numpy as np
List_to_map = ['JHA', 'LMA', 'STO', 'PQR', 'LKS']

df['Values'] = df['String'].str.split(r'\W').apply(lambda x: np.intersect1d(x, List_to_map)).str.join('+')

结果:

print(df)


   Id             String       Values
0   1   JHA PQR STO KJAN  JHA+PQR+STO
1   2  LKS JHA PLA; NIYM      JHA+LKS
2   3   LMA\KHA HYS,KNSN          LMA
3   4  JHA, PQR STO KJAM  JHA+PQR+STO
4   5  JHA PQR|STO/KJAOP  JHA+PQR+STO

或者,如果要保持原始字符串的顺序,也可以使用:

df['Values'] = df['String'].str.split(r'\W').apply(lambda x: [y for y in x if y in List_to_map]).str.join('+')

结果:

print(df)


   Id             String       Values
0   1   JHA PQR STO KJAN  JHA+PQR+STO
1   2  LKS JHA PLA; NIYM      LKS+JHA
2   3   LMA\KHA HYS,KNSN          LMA
3   4  JHA, PQR STO KJAM  JHA+PQR+STO
4   5  JHA PQR|STO/KJAOP  JHA+PQR+STO

请注意,使用numpy函数np.intersect1d()比使用Python列表理解更快。但是,匹配列表将基于List_to_map字符串序列。如果字符串concat序列不重要,我建议使用np.intersect1d()以加快执行时间

对lsit的每个值使用带单词边界的^{},然后通过^{}连接在一起:

pat = '|'.join(r"\b{}\b".format(x) for x in List_to_map)
df['Values'] = df['String'].astype(str).str.findall(pat).str.join('+')
print (df)
   Id             String       Values
0   1   JHA PQR STO KJAN  JHA+PQR+STO
1   2  LKS JHA PLA; NIYM      LKS+JHA
2   3   LMA\KHA HYS,KNSN          LMA
3   4  JHA, PQR STO KJAM  JHA+PQR+STO
4   5  JHA PQR|STO/KJAOP  JHA+PQR+STO

相关问题 更多 >