不一定要在大熊猫中进行,但是如果可以在大熊猫中进行,那就太好了。
说我有一个列表或一系列字符串:
['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 >
换句话说,以任何一个或多个字符开头的字符,但其余字符与我的另一个列表中的一个字符串完全匹配。
有人对实现此目标的最佳方法有任何想法吗?
谢谢!
答案 0 :(得分:5)
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
答案 1 :(得分:1)
由于总是在结尾,因此可以使用.str.endswith和s2
来缩短逻辑。 pd.Series
和[any(i.endswith(j) for j in s2) for i in s1]
#[True, True, True, False]
只是上面的列表(但如果它们是pd.Series
也可以使用)
log
然后您可以使用linear
将其转换为系列,或者直接使用该列表作为蒙版。