比较相同系列(行)但不同列的字符串

时间:2016-08-02 00:04:16

标签: python-3.x pandas

我在比较两列之间的字符串时遇到了这个问题。我想要做的是:对于每一行,检查字符串是否列在列B中,如果是,则在列C中打印一个新字符串“是”。

A列包含NaN值(我导入的csv中的空白单元格)。

我试过了:

df['C']=df['B'].str.contains(df.loc['A'])
df.loc[df['A'].isin(df['B']), 'C']='Yes'

它们都不起作用,因为我找不到比较字符串的正确方法。

3 个答案:

答案 0 :(得分:2)

这使用列表理解,因此它可能不是最快的解决方案,但是有效且简洁。

df['C'] = pd.Series(['Yes' if a in b else 'No' for a,b in zip(df['A'],df['B'])])

编辑:如果您不想将值保留在C中而不是用' No'覆盖它们,您可以这样做:

df['C'] = pd.Series(['Yes' if a in b else c for a,b,c in zip(df['A'],df['B'], df['C'])])

答案 1 :(得分:2)

df = pd.DataFrame([['ab', 'abc'],
                   ['abc', 'ab']], columns=list('AB'))

df['C'] = np.where(df.apply(lambda x: x.A in x.B, axis=1), 'Yes', 'No')

df

enter image description here

答案 2 :(得分:0)

尝试使用正则表达式:https://docs.python.org/2/library/re.html如果您已经为每个单元格或值必须使用id编写代码。