Python удалить строку из DataFrame на основе другого DataFrame с меньшим количеством переменных - PullRequest
0 голосов
/ 14 октября 2018

У меня есть df1, как это:

id 1  2  3  4  5
0  1  1  0  0  0 
1  1  0  1  0  0
2  1  0  0  0  1

У меня есть df (меньше столбцов, меньше случаев) со следующими значениями:

id 1  2  5  
0  1  1  0
1  1  0  1

Я хотел бы удалить из df1строки, которые имеют те же значения, что и значения из df2, поэтому окончательный вариант df выглядит следующим образом:

id 1  2  3  4  5
1  1  0  1  0  0

Я удаляю 2 строки, поскольку df1 и df2 имеют одинаковые значения в соответствующих столбцах.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

Надеюсь, это поможет вам найти решение.df2 - это кадр данных с пересечением двух других, основанный на трех одинаковых столбцах.cleared_df - это начальное значение df, за исключением пересечения.

#Replicating the question's input
d={1:[1,1,1],2:[1,0,0],3:[0,1,0],4:[0,0,0],5:[0,0,1]}
d1={1:[1,1],2:[1,0],5:[0,1]}
df = pd.DataFrame(data=d)
df1 = pd.DataFrame(data=d1)
#Make df with the same records on 1,2,5
df2=pd.merge(df, df1, on=[1,2,5], how='inner')
#Concat the initial df with the one with the same records, then drop the duplicates
cleared_df=pd.concat([df, df2]).drop_duplicates(keep=False)
0 голосов
/ 14 октября 2018

Это решит вашу проблему:

print (pd.merge(df1,df2, indicator=True, how='outer')
         .query('_merge=="left_only"')
         .drop('_merge', axis=1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...