如何在 Python 中识别字符串中的增量模式
How to identify incremental patterns in a string in Python
我有一个单列数据框,其中包含随机生成的字符。
我希望编写一些代码来识别是否有任何字符遵循某种增量模式。
示例:
ebe120xg21
ebe121xg22
vpq17laos
fvut10hals
ebe122xg23
其中一些数字明显在增加,例如120
和 121
还有 21
、22
和 23
.
我如何有效地识别这种增量?
棘手的部分是这种模式可以出现在字符串的任何部分。
试试这个:
df['nums']=df.yourcolumn.apply(lambda x: [int(i) for i in re.findall(r'\d+', x)])
df['text']=df.yourcolumn.apply(lambda x: ''.join(k for k in x if not k.isdigit()))
d={}
for i in set(df.text):
dftemp=df[df.text==i]
ltemp=[(k, z) for k,z in zip(dftemp.index, dftemp.nums)]
for p in itertools.combinations(ltemp, 2):
if any(x>y for x in p[0][1] for y in p[1][1]):
d[(p[0][0], p[1][0])]=(p[0][1], p[1][1])
这将生成一个字典,其中包含所有行对以及数字递增的相应数字。应用于您的数据,结果如下:
{(0, 1): ([120, 21], [121, 22]), (0, 4): ([120, 21], [122, 23]), (1, 4): ([121, 22], [122, 23])}
表示行(0,1)(0,4)和(1,4)之间有增量
我有一个单列数据框,其中包含随机生成的字符。 我希望编写一些代码来识别是否有任何字符遵循某种增量模式。 示例:
ebe120xg21
ebe121xg22
vpq17laos
fvut10hals
ebe122xg23
其中一些数字明显在增加,例如120
和 121
还有 21
、22
和 23
.
我如何有效地识别这种增量? 棘手的部分是这种模式可以出现在字符串的任何部分。
试试这个:
df['nums']=df.yourcolumn.apply(lambda x: [int(i) for i in re.findall(r'\d+', x)])
df['text']=df.yourcolumn.apply(lambda x: ''.join(k for k in x if not k.isdigit()))
d={}
for i in set(df.text):
dftemp=df[df.text==i]
ltemp=[(k, z) for k,z in zip(dftemp.index, dftemp.nums)]
for p in itertools.combinations(ltemp, 2):
if any(x>y for x in p[0][1] for y in p[1][1]):
d[(p[0][0], p[1][0])]=(p[0][1], p[1][1])
这将生成一个字典,其中包含所有行对以及数字递增的相应数字。应用于您的数据,结果如下:
{(0, 1): ([120, 21], [121, 22]), (0, 4): ([120, 21], [122, 23]), (1, 4): ([121, 22], [122, 23])}
表示行(0,1)(0,4)和(1,4)之间有增量