列包含列

时间:2019-02-07 13:30:07

标签: python pandas contains

我想查看数据框的每一行中A列是否包含B列中的值。

df = pd.DataFrame({'A': ["Is it 54321?", "Is it 4321?", "Is it 321?"],
                   'B': [54321, 54321, 54321]})

我尝试过:

df["C"] = df["A"] .str .contains(df["B"])

我想要:

'C': [1,0,0]

但是我得到了

TypeError: 'Series' objects are mutable, thus they cannot be hashed

5 个答案:

答案 0 :(得分:2)

或者:

df['C']=df.A.str.contains(r'\b(?:{})\b'.format('|'.join(df.B.astype(str)))).astype(int)
print(df)

              A      B  C
0  Is it 54321?  54321  1
1   Is it 4321?  54321  0
2    Is it 321?  54321  0

答案 1 :(得分:0)

我发现它可以用作功能:

def fun (A,B):
    if str(B) in A:
        return 1
    else:
        return 0
f = np.vectorize(fun, otypes=[float])
df["C"] = f(df['A'],df['B'])

答案 2 :(得分:0)

这是另一种方法:

df['C'] = (df['B'] == df['A'].str.rstrip('?').str.split(' ').str[-1].astype(int)) * 1

答案 3 :(得分:0)

您可以简化代码:

def fun (A,B):
    return str(B) in str(A) # Edit: A to str(A)

f = np.vectorize(fun, otypes=[int])
df["C"] = f(df['A'],df['B'])

或使用列表理解:

df["C"] = [int(str(B) in A) for A, B in zip(df['A'],df['B'])]

答案 4 :(得分:0)

我已经在此线程上接受了各种答案,但是我遇到了问题,如下所述: Column contains column 1

感谢Wen-Ben的回答:

如果您希望12出现在123中:

df = df.dropna()
df['C'] = [str(y) in x for x , y in zip(df.A,df.B)]
print(df)

或者如果您不希望12出现在123中:

df = df.dropna()
df['C'] = [str(y) in x for x , y in zip(df.A.str.split(' '),df.B)]
print(df)