iterrows()
возвращает не просто строку, как вы ожидаете, но кортеж индекса строки и самой строки. Таким образом, этот кортеж из двух значений не имеет индекса 6, поэтому вы получаете исключение: «индекс кортежа вне диапазона» (обратите внимание на кортеж )
Если вам не нужен индекс строки, вы можете использовать любое имя, лучшее из которых - _, которое является правильным именем переменной и используется в python для пометки переменных, которые вам не нужны. Таким образом, правильный код цикла -
for _, row in XDFDF.iterrows():
for _, row2 in XDFDF.iterrows():
Или, если индекс - это просто последовательность целых чисел от 0, вы можете использовать его вместо ct1 и ct2, если вы предполагаете, что ct2 должен быть сброшен в 0 в начале каждого цикла для строки 2 (кстати, нет ct2 = 0
перед этим циклом, что может быть логической ошибкой). Чтобы убедиться, что индекс действительно необходим, я бы рекомендовал перед возвратом использовать команду reset_index (drop = True). В противном случае было бы трудно найти проблему, если бы вы манипулировали данными раньше и нарушали последовательность индексов.
Но на самом деле, если вам нужно только найти повторяющиеся значения (ваш код не делает именно этого, но я не уверен, если это предполагается или логическая ошибка в коде), вы можете использовать pandas drop_duplicates
, который будет делать вся работа для тебя. Таким образом, мы можем создать столбец «уникальный» и установить True для тех индексов, которые не отбрасываются как дубликаты
XDFDF["unique"] = False
indexes_of_unique = XDFDF.loc[:, 6].drop_duplicates(keep=False).index
XDFDF.loc[indexes_of_unique, "unique"] = True
Эта часть является самой важной XDFDF.loc[:, 6].drop_duplicates(keep=False).index
. Он получает столбец 6, удаляет повторяющиеся значения (по умолчанию он сохраняет одно дублирующее значение, но keep = False заставляет отбрасывать все значения, имеющие дубликаты). Итак, теперь у нас есть индексы уникальных значений, и мы можем пометить их. Важное замечание: индексы в пандах не обязательно будут уникальными, поэтому я рекомендую сделать XDFDF.reset_index(drop=True, inplace=True)
, чтобы не было логических коллизий с дублирующимися индексами.