#python #pandas
#python #pandas
Вопрос:
У меня есть следующая структура фрейма данных с примерами данных:
Col1 Col2 Col3
1 1 8
5 4 7
3 9 9
1 NaN NaN
Столбцы имеют последовательный порядок, то есть Col1 предшествует Col2 и так далее…
Я хочу сравнить, имеют ли два (или более) последующих столбца одинаковое значение. Если это так, я хочу удалить всю строку. Значения NaN могут отображаться, но не должны рассматриваться как имеющие одинаковое значение
Итак, с приведенными выше строками я бы хотел, чтобы строки 1 и 3 были удалены (строка 1: то же значение Col1-> Col2, строка 3: то же значение Col2 -> Col3), а строки 2 и 4 должны храниться в фрейме данных.
Как я могу это сделать? Спасибо!
Ответ №1:
Используйте DataFrame.diff
и фильтруйте строки, если не существует 0
значения для строк, DataFrame.ne
для не равно и DataFrame.all
для проверки, если все True
и фильтр в boolean indexing
:
df = df[df.diff(axis=1).ne(0).all(axis=1)]
print (df)
Col1 Col2 Col3
1 5 4.0 7.0
3 1 NaN NaN
Подробнее:
print (df.diff(axis=1))
Col1 Col2 Col3
0 NaN 0.0 7.0
1 NaN -1.0 3.0
2 NaN 6.0 0.0
3 NaN NaN NaN
print (df.diff(axis=1).ne(0))
Col1 Col2 Col3
0 True False True
1 True True True
2 True True False
3 True True True
print (df.diff(axis=1).ne(0).all(axis=1))
0 False
1 True
2 False
3 True
dtype: bool