我有一个字符串列表
list_ = ['abc', 'def', 'xyz']
我有一个带有列df
的{{1}},我想检查CheckCol
中的值是否包含列表元素的整个子串中的任何一个。
如果这样做,我想将原始值提取到新列CheckCol
中。
NewCol
进入
CheckCol
'a'
'ab'
'abc'
'abc-de'
但是,我的以下代码只能识别确切的完整字符串,而不能识别我想要的子字符串。
# 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
答案 0 :(得分:3)
我认为实现“最简单”的解决方案是使用正则表达式。在正则表达式中,管道|
表示or。通过执行'|'.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名称空间。