我想查看数据框的每一行中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
答案 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)