У меня есть набор строк в кадре данных, которые имеют несколько повторяющихся соседних значений, которые расположены в в той же позиции каждого столбца и выглядят так:
row_data = pd.DataFrame({0 : [1.1, 1.2, 1.2, 1.3, 1.4, 1.5, 1.5, 1.6],
1 : [2.3, 2.2, 2.2, 2.3, 2.4, 2.5, 2.5, 2.6],
2 : [2.4, 2.2, 2.2, 2.3, 2.4, 2.6, 2.6, 2.7],
3 : [7.1, 7.2, 7.2, 7.3, 7.4, 7.5, 7.5, 7.6]}).T
Каккак указано выше (1.2, 1.2) в строке 0 находится в том же положении, что и (2.2, 2.2) в строке 1, (2.2, 2.2) в строке 2 и (7.2, 7.2) в строке 3 и т. д.
Я хочу иметь возможность сначала проверить, есть ли дубликаты соседей в каждой строке, удалить дубликаты , оставив только первый экземпляр этого , и подсчитатьиз числа всего дубликатов было удалено.
Я пытался выполнять итерации по каждой строке, но это слишком много времени, так как этот кадр данных очень большой (36 строк на 260 000 столбцов).Псевдокод, который я хотел бы иметь, следовал бы этой логике:
count_dup = 0
for index in range(0, len(row_data.columns)):
if row_data[index] == row_data[index+1]:
count_dup = count_dup + 1
row_data[index] = np.nan
Мой псевдокод, очевидно, не работает, но остальное было бы удалить NAN, удалив дубликаты из всех столбцов.
Вывод будет:
row_data_dropped = pd.DataFrame({0 : [1.1, 1.2, 1.3, 1.4, 1.5, 1.6],
1 : [2.3, 2.2, 2.3, 2.4, 2.5, 2.6],
2 : [2.4, 2.2, 2.3, 2.4, 2.6, 2.7],
3 : [7.1, 7.2, 7.3, 7.4, 7.5, 7.6]}).T
total_dropped_neighbors = 8
Можно ли как-нибудь это сделать?