Вернуть True, если строка в одном Dateframe находится в нескольких столбцах другого DataFrame (сложность времени) - PullRequest
1 голос
/ 29 апреля 2020

У меня есть 2 кадра данных ниже. Моя цель - проверить, находятся ли значения столбца df ['A'] в нескольких столбцах второго кадра данных df2 ['B'] или df2 ['C'], и вернуть true или false, если значение присутствует , Столбец test - это мой выходной столбец.

df

A       test     
q       True 
w       False
e       True 

df2

B       C     
q       r 
g       r
g       e 

Мой текущий код ниже работает, однако он работает очень медленно с сотнями и тысячами строк. Я использую метод list в этом случае ниже, чтобы преобразовать 2 столбца df2 в список и проверить, есть ли строки в этом списке. Однако мне нужно что-то гораздо быстрее, чем это.

listb = df2['B'].to_list()
listc = df2['C'].to_list()

df['test'] = df['A'].apply(lambda x: 'True' if x in (listb or listc) else 'False') 

Я пытался использовать метод .isin(), но, похоже, не могу заставить его работать с несколькими столбцами для поиска нескольких столбцов в отдельных наборах данных. Этот код запускает, однако, возвращает все False, что неверно.

df['test'] = df['A'].isin(df2[['B','C']]).any(axis = 1) 

1 Ответ

1 голос
/ 29 апреля 2020

Вы можете использовать isin после того, как отправите другой DataFrame. Или np.in1D. Присвойте результат обратно df['test'].

np.in1d(df1['A'], df2)
#array([ True, False,  True])

df['A'].isin(df2.to_numpy().ravel())
#0     True
#1    False
#2     True
#Name: A, dtype: bool
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...