извлекая самый длинный матч - PullRequest
2 голосов
/ 08 апреля 2019

Рассмотрим эту простую установку

import pandas as pd

df = pd.DataFrame({'id' : [1,2,3],
                   'text' : ['stack-overflow',
                             'slack-overflow',
                             'smack-over']})
df
Out[9]: 
   id            text
0   1  stack-overflow
1   2  slack-overflow
2   3      smack-over

У меня есть заданное регулярное выражение, и я хотел бы извлечь совпадение longest .Я знаю, что могу использовать str.extractall, чтобы получить все совпадения, но как я могу получить самый длинный из них (как столбец df['mylongest'] в кадре данных)?

Конечно, в этом примере самыми длинными совпадениями являются переполнение, переполнение и привкус.

df.text.str.findall(r'(\w+)')
Out[10]: 
0    [stack, overflow]
1    [slack, overflow]
2        [smack, over]
Name: text, dtype: object

Ответы [ 2 ]

2 голосов
/ 08 апреля 2019

Если вы хотите попробовать что-то в pandas

s=df.text.str.extractall(r'(\w+)')[0]
s[s.str.len().eq(s.str.len().max(level=0),level=0)]
Out[51]: 
   match
0  1        overflow
1  1        overflow
2  0           smack
Name: 0, dtype: object
2 голосов
/ 08 апреля 2019

Давайте сопоставим max с результатом str.findall.Я использую functools.partial, чтобы избежать лямбды.

from functools import partial

f = partial(max, key=len)
df['text'].str.findall(r'(\w+)').map(f)

0    overflow
1    overflow
2       smack
Name: text, dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...