Не совсем уверен в эффективности кода, но он выполняет свою работу:
uniqueRows = {}
for index, row in df.iterrows():
duplicateFound = False
for c_value, uniqueRow in uniqueRows.items():
if duplicateFound:
continue
if len(row['B']) == len(uniqueRow):
if len(list(set(row['B']) - set(uniqueRow))) == 0:
print(c_value)
df.at[index, 'C'] = c_value
uniqueFound = True
if not duplicateFound:
uniqueRows[row['C']] = row['B']
print(df)
print(uniqueRows)
Этот код сначала перебирает ваш фрейм данных. Он имеет логическое значение duplicateFound для каждой строки, которая будет использоваться позже.
Он будет l oop над диктовкой uniqueRows и сначала проверяет, найден ли дубликат. В этом случае он продолжит пропускать вычисления, так как в этом больше нет необходимости.
После этого он сравнивает длину списка, чтобы пропустить некоторые сравнения, и в случае его совпадения использует следующий код : возвращает список с различиями, а в случае отсутствия различий возвращает пустой список.
Таким образом, если список пуст, он устанавливает значение из столбца C в этой позиции, используя pandas dataframe at function (это необходимо использовать при переборе по фрейму данных link ). Он устанавливает для переменной unqiueFound значение True, чтобы предотвратить дальнейшие сравнения. Если дубликаты не были найдены, значение uniqueFound все равно будет равно False и будет вызывать добавление к диктанту uniqueRows в конце для l oop перед переходом к следующей строке.
Если у вас есть какие-либо комментарии или улучшения к моему коду, не стесняйтесь обсуждать и надеяться, что этот код поможет вам в вашем проекте!