查找某些字符串是否在pandas数据框中(行式和列式操作)

时间:2018-01-24 16:21:23

标签: python python-3.x pandas python-3.6

Hello stackoverflowers !!

我有以下数据框

import numpy as np 
import pandas as pd

dataframe = pd.DataFrame({'column1': ['a', 'alike', 'b', 'x', 'a'],
                          'column2': ['a', 'b', 'c', 'unlake', 'like']})

  column1 column2
0       a       a
1   alike       b
2       b       c
3       x  unlake
4       a    like

我想创建另一个列,如果有以下任何字符串,则为1

check = ['like', 'lake', 'lik']

位于两列中的任何一列。

我从这开始:

any([check1 in dataframe['column1'][1] for check1 in check]) # for one value this works

然而,当我想为整个专栏做这件事时,我没有得到预期的结果

dataframe[['column1']].apply(lambda row: any((check1 in row for check1 in check)), axis = 1) # this works but does not give the expected

我可能错过了一些东西。

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

这可以给你你想要的东西

df['new_col'] = np.where(df.isin(check).any(axis=1),1,0) #this is for an exact match

展开以查看它是否包含任何项目

import numpy as np 
import pandas as pd

df = pd.DataFrame({'column1': ['a', 'alike', 'b', 'x', 'a'],
                      'column2': ['a', 'b', 'c', 'unlake', 'like']})
check = ['like', 'lake', 'lik']
pattern = '|'.join(check)
mask = np.column_stack([df[col].str.contains(pattern, na=False) for col in df])
df['check'] = np.where(mask.any(axis=1),1,0)

答案 1 :(得分:1)

将np.logical_or与pd.Series.str.contains结合使用。这假设允许部分匹配。

import numpy as np 
import pandas as pd

df = pd.DataFrame({'column1': ['a', 'alike', 'b', 'x', 'a'],
                   'column2': ['a', 'b', 'c', 'unlake', 'like']})

test_str = '|'.join({'like', 'lake', 'lik'})

df['Test'] = np.logical_or(df['column1'].str.contains(test_str),
                           df['column2'].str.contains(test_str))


# output
# column1 column2 Test
# a a False 
# alike b True 
# b c False 
# x unlake True 
# a like True 

答案 2 :(得分:1)

您可以使用正则表达式“或”运算符|将子字符串连接在一起,然后应用pd.Series.str.contains方法,如下所示:

dataframe['substr_match'] = dataframe.apply(\
  lambda col: col.str.contains('|'.join(check))).any(axis=1)
#   column1 column2  substr_match
# 0       a       a         False
# 1   alike       b          True
# 2       b       c         False
# 3       x  unlake          True
# 4       a    like          True