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'])]