#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)