Pandas: сравнить значение следующего столбца со значением предыдущего столбца

#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