Как отфильтровать фрейм данных, получив все в df, МИНУС еще один df?

#python #pandas #dataframe

#python #панды #фрейм данных

Вопрос:

Если у меня есть этот фрейм данных pandas :

 data = [{'Name': 'Tom', 'Age': 42}, {'Name': 'Adam', 'Age': 25}
         ,{'Name': 'Bill', 'Age': 65}]

df = pd.DataFrame(data)

q = df[df['Name'] == 'Tom']
  

Как я могу отфильтровать df , чтобы получить все строки фрейма данных, за исключением того, что я отфильтровал q

Таким образом, он должен возвращать {‘Name’: ‘Adam’, ‘Age’: 25} и {‘Name’: ‘Bill’, ‘Age’: 65} .

Спасибо!

Комментарии:

1. Должен ли возвращаться Adam или Tom?

Ответ №1:

Для этого вы можете использовать LOC и ~ . Это поможет вам «фильтровать» ваш DF

 df = df.loc[~df.Name.isin(['Adam']),:]
  

Ответ №2:

Если возможно, вы можете инвертировать маску != на значение не равно:

 new = df[df['Name'] != 'Tom']
print (new)
   Name  Age
1  Adam   25
2  Bill   65
  

Другая идея — удалить значения индекса q из оригинала DataFrame , но она работает хорошо, только если уникальные значения индекса:

 q = df[df['Name'] == 'Tom']
new = df.drop(q.index)
print (new)
   Name  Age
1  Adam   25
2  Bill   65