Фильтрация данных на основе столбца другого df без isin () - PullRequest
0 голосов
/ 27 января 2019

Я хочу отфильтровать df1 на основе столбца df2. Мне нужно только сохранить строки в df1, если они появляются в df2. Я пытался использовать isin() так:

df1 = pd.DataFrame({'A' : [5,6,3,6,3,4]})

df2 = pd.DataFrame({'B' : [0,0,3,6,0,0]})

df1[df1['A'].isin(df2['B'])]

Что дает желаемый df:

    A
    6
    3
    6
    3

Однако мои фреймы данных очень большие (миллионы строк), поэтому эта операция занимает значительное время. Существуют ли другие, более эффективные способы получения желаемого результата?

1 Ответ

0 голосов
/ 27 января 2019

Что делать, если вы попытаетесь покинуть присоединение, а затем отфильтровать NA.Я только что сгенерировал два довольно больших фрейма данных (10 миллионов один и 4 миллиона другой), и на среднем ноутбуке с 8 ГБ оперативной памяти он работал в считанные секунды.Пример ниже.Надеюсь, это поможет.

df1 = pd.DataFrame({'A' : range(10000000), "B": range(0, 20000000, 2)})
df2 = pd.DataFrame({'C' : range(4000000), "D": range(0, 8000000, 2)})
df = pd.merge(df1, df2, how="left", left_on="B", right_on="C")
df = df[df["C"].notnull()].copy()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...