Панды находят супер струны в одной серии из другой серии - PullRequest
0 голосов
/ 28 июня 2018

Это не обязательно должно быть сделано в пандах, но было бы хорошо, если бы это можно было сделать в пандах.

Скажем, у меня есть список или серия строк:

['XXY8779','0060-19','McChicken','456728']

И у меня есть еще один список или серия, которая содержит подстроки оригинала, например:

['60-19','Chicken','8779','1124231','92871','johnson']

И это вернет что-то вроде:

[True, True, True, False]

Я ищу совпадение, похожее на:

^[a-zA-Z0-9.,$;]+ < matching string in other list >

Другими словами, то, что начинается с 1 или более символов, а остальные совпадают с одной из строк в моем другом списке.

У кого-нибудь есть идеи, как лучше всего это сделать?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Поскольку это всегда в конце, вы можете использовать .str.endswith и any для короткого замыкания логики. s1 и s2 - это только ваши списки выше (но это также работает, если они pd.Series)

[any(i.endswith(j) for j in s2) for i in s1]
#[True, True, True, False]

Затем вы можете преобразовать его в серию с pd.Series или просто использовать этот список в качестве маски как есть.

0 голосов
/ 28 июня 2018

Использование str.contains

'|'.join(s2) создает строку, которая говорит contains использовать regex и использовать или логику.

s1 = pd.Series(['XXY8779', '0060-19', 'McChicken', '456728'])

s2 = ['60-19', 'Chicken', '8779', '1124231', '92871', 'johnson']

s1.str.contains('|'.join(s2))

0     True
1     True
2     True
3    False
dtype: bool
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...