Удаление логических строк на основе условия

#python #python-3.x #pandas #dataframe

#python #python-3.x #панды #фрейм данных

Вопрос:

У меня есть df, из которого мне нужно удалить определенные строки.

Как я мог бы удалить все строки, где NIT равно true, а все остальные — false? И то же самое для FIB?

Удалите все строки, подобные этим:

 number ISM  AAAL    GSOG    GSI     AN      NIT     FIB
2     FALSE FALSE   FALSE   FALSE   FALSE   TRUE    FALSE
222   FALSE FALSE   FALSE   FALSE   FALSE   FALSE   TRUE    
  

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

1. Если мой ответ вас удовлетворяет, пожалуйста, отметьте его как ответ, чтобы другие пользователи могли видеть, что он отвечает на вопрос.

2. Есть ли способ сделать это за один шаг, чтобы у меня был только один фрейм данных после удаления строк?

3. Конечно, вы можете просто добавить все условия в одну строку, но это ухудшает читаемость.

4. df = df.drop(df[(df['NIT'] amp; ~df.drop('NIT', axis=1).all(axis=1)) | (df['FIB'] amp; ~df.drop('FIB', axis=1).all(axis=1))].index)

5. Или вы можете упростить это, чтобы быть df = df[~df.drop(['NIT','FIB'], axis = 1).all(axis=1) amp; ~df[['NIT','FIB']].all(axis=1)]

Ответ №1:

 mask_NIT_true = df['NIT']
mask_all_exc_NIT_false = ~df.drop('NIT', axis=1).all(axis=1)
df = df.drop(df[mask_NIT_true amp; mask_all_exc_NIT_false].index)
  
 mask_FIB_true = df['FIB']
mask_all_exc_FIB_false = ~df.drop('FIB', axis=1).all(axis=1)
df = df.drop(df[mask_FIB_true amp; mask_all_exc_FIB_false].index)