Python Pandas - не удается распознать строку из столбца в другом столбце данных - PullRequest
0 голосов
/ 16 июня 2019

У меня есть фрейм данных со следующими данными:

enter image description here

Теперь я пытаюсь использовать метод isIn для создания нового столбцас результатом, если col_a находится в col_b. Так что в этом случае я пытаюсь произвести следующий вывод:

enter image description here

Для этого я использую этокод:

df['res'] = df.col_a.isin(df.col_b)

Но всегда возвращается FALSE.Я также пробую это: df['res'] = df.col_b.isin(df.col_a) но с тем же результатом ... все строки, как FALSE.

Что я делаю не так?

Спасибо!

1 Ответ

0 голосов
/ 16 июня 2019

Вы можете проверить, находится ли значение в col_a в col_b для строк по apply:

df['res'] = df.apply(lambda x: x.col_a in x.col_b, axis=1)

Или по списку:

df['res'] = [a in b for a, b in zip(df.col_a, df.col_b)]

EDIT: Ошибка, очевидно, означает, что отсутствуют значения, поэтому необходимо if-else утверждение:

df = pd.DataFrame({'col_a':['SQL','Java','C#', np.nan, 'Python', np.nan],
                   'col_b':['I.like_SQL_since_i_used_to_ETL',
                            'I like_programming_SQL.too',
                            'I prefer Java',
                            'I like beer',
                             np.nan,
                             np.nan]})
print (df)

df['res'] = df.apply(lambda x: x.col_a in x.col_b 
                               if (x.col_a == x.col_a) and (x.col_b == x.col_b) 
                               else False, axis=1)

df['res1'] = [a in b if (a == a) and (b == b) else False for a, b in zip(df.col_a, df.col_b)]
print (df)
    col_a                           col_b    res   res1
0     SQL  I.like_SQL_since_i_used_to_ETL   True   True
1    Java      I like_programming_SQL.too  False  False
2      C#                   I prefer Java  False  False
3     NaN                     I like beer  False  False
4  Python                             NaN  False  False
5     NaN                             NaN  False  False
...