Python-检查子字符串包含并将新列设置为子字符串

Python-检查子字符串包含并将新列设置为子字符串,python,string,pandas,Python,String,Pandas,我需要检查字符串包含并将新列设置为子字符串值。我正在尝试这个 df['NEW_COL'] = df['COL_TO_CHECK'].str.contains('|'.join(substring_list)) 而不是返回包含的布尔值true false。。。我需要从substring\u list返回与填充df['NEW\u COL] 要检查的子字符串 结果数据帧 你对你的数据和你想要的东西不是很有洞察力,但一般原则是你可以使用: df['NEW_COL'] = df['COL_TO_CHEC

我需要检查字符串包含并将新列设置为子字符串值。我正在尝试这个

df['NEW_COL'] = df['COL_TO_CHECK'].str.contains('|'.join(substring_list))
而不是返回包含的布尔值true false。。。我需要从
substring\u list
返回与填充
df['NEW\u COL]

要检查的子字符串 结果数据帧
你对你的数据和你想要的东西不是很有洞察力,但一般原则是你可以使用:

df['NEW_COL'] = df['COL_TO_CHECK'].apply(lambda x: do_something(x) if is_something(x) else x)
或者在你的例子中:

substring_list = set(['apple', 'banana', 'cherry'])
df['NEW_COL'] = df['OLD_COL'].apply(lambda x: set(x.split()).intersection(substring_list).pop())

set
更快:)

您对数据内容和所需内容不是很有洞察力,但一般原则是您可以使用:

df['NEW_COL'] = df['COL_TO_CHECK'].apply(lambda x: do_something(x) if is_something(x) else x)
或者在你的例子中:

substring_list = set(['apple', 'banana', 'cherry'])
df['NEW_COL'] = df['OLD_COL'].apply(lambda x: set(x.split()).intersection(substring_list).pop())
set
更快:)

我会这样做:

In [148]: df
Out[148]:
             OLD_COL
0          apple pie
1       black cherry
2  banana lemon drop

In [149]: pat = '.*({}).*'.format('|'.join(substring_list))

In [150]: pat
Out[150]: '.*(apple|banana|cherry).*'

In [151]: df['NEW_COL'] = df['OLD_COL'].str.replace(pat, r'\1')

In [152]: df
Out[152]:
             OLD_COL NEW_COL
0          apple pie   apple
1       black cherry  cherry
2  banana lemon drop  banana
我会这样做:

In [148]: df
Out[148]:
             OLD_COL
0          apple pie
1       black cherry
2  banana lemon drop

In [149]: pat = '.*({}).*'.format('|'.join(substring_list))

In [150]: pat
Out[150]: '.*(apple|banana|cherry).*'

In [151]: df['NEW_COL'] = df['OLD_COL'].str.replace(pat, r'\1')

In [152]: df
Out[152]:
             OLD_COL NEW_COL
0          apple pie   apple
1       black cherry  cherry
2  banana lemon drop  banana


请分享输入和输出的示例…请分享输入和输出的示例…此解决方案有效,但我不认为这是最好的方法,为每一行创建一个列表似乎并不有效
df['COL\u TO\u CHECK].apply(lambda x:[s代表子字符串列表中的s,如果s在x][0])
set
最适合包含检查,我知道,duh:)我认为我的解决方案更合适flexible@MaxU没问题:)+1回到你身边这个解决方案很有效,但我不认为这是最好的办法,为每一行创建一个列表似乎不是很有效
df['COL\u TO\u CHECK].apply(lambda x:[s代表子字符串列表中的s,如果s代表x][0])
set
最适合包含检查,我知道,duh:)我认为我的解决方案更有效flexible@MaxU没问题:)+1返回给您什么是
r'\1'
r'\1'
是第一个捕获的正则表达式组您对我上面使用的方法有什么看法
df['COL\u TO\u CHECK].apply(lambda x:[s代表子字符串列表中的s,如果s在x中)[0])
@aranfleel,哦,我在评论中没有注意到这个解决方案。这对我来说很好…@aranfleel,如果你在搜索单词,而不是子字符串,有更好的选择。什么是
r'\1'
r'\1'
是第一个捕获的正则表达式组。你对我上面使用的方法有什么看法
df['COL\u TO\u CHECK].apply(lambda x:[s代表子字符串列表中的s,如果s在x中)[0])
@aranfleel,哦,我在评论中没有注意到这个解决方案。对我来说,它看起来相当不错…@Aranfleel,如果你在搜索单词,而不是子字符串,那么有更好的选择