Python Pandas: проверьте, содержится ли строка в одном столбце в строке другого столбца в той же строке

У меня есть dataframe, как это:

RecID| A  |B
----------------
1    |a   | abc 
2    |b   | cba 
3    |c   | bca
4    |d   | bac 
5    |e   | abc 

И хочу создать другой столбец C из A и B, чтобы для той же строки, если строка в столбце A содержится в строке столбца B, тогда C = True, а если нет, то C = False.

Пример вывода, который я ищу, следующий:

RecID| A  |B    |C 
--------------------
1    |a   | abc |True
2    |b   | cba |True
3    |c   | bca |True
4    |d   | bac |False
5    |e   | abc |False

Есть ли способ сделать это в pandas быстро и без использования цикла? Благодаря

Ответ 1

Вам нужно apply с in:

df['C'] = df.apply(lambda x: x.A in x.B, axis=1)
print (df)
   RecID  A    B      C
0      1  a  abc   True
1      2  b  cba   True
2      3  c  bca   True
3      4  d  bac  False
4      5  e  abc  False

Другое решение с list comprehension выполняется быстрее, но не должно быть NaN s:

df['C'] = [x[0] in x[1] for x in zip(df['A'], df['B'])]
print (df)
   RecID  A    B      C
0      1  a  abc   True
1      2  b  cba   True
2      3  c  bca   True
3      4  d  bac  False
4      5  e  abc  False

Ответ 2

Я не смог получить ни одного ответа @jezreal, предоставленного для обработки None в первом столбце. Небольшое изменение в понимании списка может с этим справиться:

[x[0] in x[1] if x[0] is not None else False for x in zip(df['A'], df['B'])]