我有一个数据框。我想测试(C),在每行上,(B)列中的数字是否在字符串(A)列中。
df = pd.DataFrame({'A': ["me 123", "me-123", "1234", "me 12", "123 and"],
'B': [123, 123, 123, 123, 6]})
我想得到:
A B C
0 me 123 123 1
1 me-123 123 1
2 1234 123 0
3 me 12 123 0
4 123 and 6 0
各种方法几乎可以解决这个问题 (1):
df['C'] = [str(y) in x for x , y in zip(df.A.str.split(' '),df.B)]
A B C
0 me 123 123 True
1 me-123 123 False
2 1234 123 False
3 me 12 123 False
4 123 and 6 False
or (2):
df['C'] = [str(y) in x for x , y in zip(df.A,df.B)]
A B C
0 me 123 123 True
1 me-123 123 True
2 1234 123 True
3 me 12 123 False
4 123 and 6 False
or (3):
df['C']=df.A.str.contains(r'\b(?:{})\b'.format('|'.join(df.B.astype(str)))).astype(int)
A B C
0 me 123 123 1
1 me-123 123 1
2 1234 123 0
3 me 12 123 0
4 123 and 6 1
or (4):
def fun (A,B):
return str(B) in str(A)
f = np.vectorize(fun, otypes=[int])
df["C"] = f(df['A'], df['B'])
A B C
0 me 123 123 1
1 me-123 123 1
2 1234 123 1
3 me 12 123 0
4 123 and 6 0
or (5):
df['A1'] = df['A'] .apply(word_tokenize)
无法将 - 识别为空格。请问怎样才能得到上面的结果呢?