2016-12-24 2 views
3

У меня есть 2 набора данных:как я могу «де-слияния» кадры данных панд для производства 2 различных наборов

df1 
    'Y' 
A a 
B b 
C c 
D d 
E e 

df2 
    'Y' 
D d 
E e 
F f 

Мне нужно преобразовать первую DF1, чтобы удалить все данные, появляющиеся в df2 я могу легко сделать это с помощью SQL, но это не вариант для меня Логика 'select * from df1 where df1.Y not in (select Y from df2)' Я не могу получить реализацию правильно, используя слияние. Есть идеи? Желаемый результат:

df3 
    'Y' 
A a 
B b 
C c 

с df2 неизмененном

+0

, связанные с: http://stackoverflow.com/questions/28901683/pandas-get-rows-which-are-not-in-other-dataframe и dupe: http://stackoverflow.com/questions/32651860/python-pandas-how-to-find-rows-in-one-dataframe бут-не-в-другой – EdChum

ответ

4

Вы можете подмножество df1 с помощью метода .isin():

df1[~df1.Y.isin(df2.Y)] 

# Y 
#A a 
#B b 
#C c 
2

я как @Psidom's Pandas solution.

Вот альтернатива NumPy:

In [26]: d1[~np.in1d(d1.Y, d2.Y)] 
Out[26]: 
    Y 
A a 
B b 
C c 

и еще одно решение Панды, который использует SQL-подобный метод: query()

In [30]: d1.query('Y not in @d2.Y') 
Out[30]: 
    Y 
A a 
B b 
C c 

 Смежные вопросы

  • Нет связанных вопросов^_^