我有一个名字数据集。基于名称的字母数字字符串,我需要将它们映射到子名称,如下所示。
Name Subname
9-AIF-09 9A09
980-PD-Z09A 980P09
15-KIC-12 15K12
PIA-110H P-110
IC009A I009A可以定义这样的规则,例如,如果“A”在名称中,然后保留所有的数字和字母表'A','P‘在名称中,那么只有'P’才会继续。模式必须由算法本身来识别映射是如何完成的。
是否有任何算法可用于从训练数据集中识别模式以进一步预测。
发布于 2022-03-27 17:31:45
我有两种选择。
得到三个组(在第一个字母之前、第一个字母之前、第一个字母之后),并删除第一组和第三组中的所有非数字:
import re
df['Subname'] = df['Name'].str.replace(r'([^a-zA-Z]+)([a-zA-Z])(.*)',
lambda m: (re.sub('\D', '', m.group(1))
+m.group(2)
+re.sub('\D', '', m.group(3))),
regex=True)或者,定义一个模式: non-digits/digits/non-digits/letter/non-digits/digits/non-digits:
df['Subname'] = (df['Name'].str.extract(r'\D*(\d+)[^\da-zA-Z]*([a-zA-Z])\D*(\d+)')
.agg(''.join, axis=1)
)输出
Name Subname
0 9-AIF-09 9A09
1 980-PD-Z09A 980P09
2 15-KIC-12 15K12https://stackoverflow.com/questions/71634131
复制相似问题