Панды: печать «совпадения» вместо только логического результата - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть столбец с текстом и подстрокой. Цель состоит в том, чтобы выполнить итерацию по тексту, и, если есть совпадение, я хотел бы напечатать это совпадение в новом столбце, а не только находить утверждение True / False. Как это сделать? Текущий код:

sLength = len(dfEx5)
substring = ['AmericanAir', 'JetBlue', 'SouthwestAir', 'united','USAirways', 'VirginAmerica']
dfEx5['mentions'] = pd.Series(1, index=dfEx5.index) #Add a new column 'mentions' with 1's
pd.options.mode.chained_assignment = None #To deal with the 'SettingWithCopyWarning'

dfEx5['mentions'] = next((substring for substring in dfEx5['text'] if substring in dfEx5['text']), True)

Где dfEx5['text'] является pandas.core.series.Series.

1 Ответ

0 голосов
/ 11 сентября 2018

Используйте метод apply для передачи пользовательской функции:

substring = ['AmericanAir', 'JetBlue', 'SouthwestAir', 'united','USAirways', 'VirginAmerica']
df= pd.DataFrame([["AmericaAir5","JetBlue2"],["JetBlue2","SouthwestAir"]],columns=['text','what'])
def searchr(x,s):
    for i in s:
        if x.find(i)+1:
            return i
        else:
            continue
df["mentions"]=df['text'].apply(searchr,args=(substring,))

В качестве альтернативы, вы можете использовать регулярное выражение:

import re
r = re.compile('('+"|".join(substring)+')')
df["m"] = df.text.str.extract(r)

Первый метод кажется быстрее, чем регулярное выражение str concat

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...