Как проверить, содержат ли строки Pandas какую-либо полную строку или подстроку списка? - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть список строк

list_ = ['abc', 'def', 'xyz']

И у меня есть df со столбцом CheckCol, который я хочу проверить, содержит ли значение в CheckCol какую-либо целую подстрокуэлемента списка.

Если это так, я хочу извлечь исходное значение в новый столбец NewCol.

CheckCol
'a'
'ab'
'abc'
'abc-de'

Into

# What I want
CheckCol        NewCol
'a'
'ab'
'abc'           'abc'
'abc-de'       'abc-de'

Мои следующие коды, однако,распознавать только точную полную строку, но не подстроки, которые я искал.

df['NewCol'] = np.where(df['CheckCol'].isin(list_), df['CheckCol'], '')

И дает

# What I get
CheckCol        NewCol
'a'
'ab'
'abc'           'abc'
'abc-de'       

Правки: Изменено list на list_

1 Ответ

0 голосов
/ 15 ноября 2018

Я думаю, что самым простым реализованным решением было бы использование регулярных выражений. В регулярном выражении труба | означает или. Делая '|'.join(yourlist), мы получаем подстроки, которые мы хотим проверить.

import pandas as pd
import numpy as np

list_ = ['abc', 'def', 'xyz']

df = pd.DataFrame({
    'CheckCol': ['a','ab','abc','abd-def']
})

df['NewCol'] = np.where(df['CheckCol'].str.contains('|'.join(list_)), df['CheckCol'], '')

print(df)

#  CheckCol   NewCol
#0        a         
#1       ab         
#2      abc      abc
#3  abd-def  abd-def

ПРИМЕЧАНИЕ: Имя вашей переменной list было изменено на list_. Старайтесь избегать использования зарезервированного пространства имен Python.

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