Вот одно из решений.
Шаг 1 - Первый шаг - сортировка значений «Имя» и «Ссылка 1» вдоль оси столбца.
datax[['Name', 'Link 1']].apply(sorted, axis=1)
Это дает вам список как это
0 [A, B]
1 [A, B]
2 [B, C]
Шаг 2 - Затем вам нужно преобразовать их в строки (списки beacuse не принимаются, когда вы используете df.duplicated()
), используя .apply(lambda x: ','.join(map(str, x)))
Шаг 3 - Далее найдите дубликаты, используя df.duplicated()
, и сохраните их в новом столбце «temp».
datax['temp'] = datax[['Name', 'Link 1']].apply(sorted, axis=1).apply(lambda x: ','.join(map(str, x))).duplicated(keep='first')
На этом этапе ваш df datax
будет
Name Latitude Longitude Link 1 Link 2 Link 3 Link 4 Link 5 temp
0 A 34.466667 72.200000 B NaN NaN NaN NaN False
1 B 33.766667 72.366667 NaN C D NaN NaN True
2 C 33.761500 72.434000 B E G NaN NaN False
Шаг 4 - Теперь вы можете использовать np.where()
и проверить, если datax['temp']
имеет значение True и присваивает datax['Link 1']
соответственно
datax['Link 1'] = np.where(datax['temp']==True, np.NaN, datax['Link 1'])
Шаг 5 - После этого можно удалить столбец temp
, используя datax.drop('temp', axis=1)
Вывод:
Name Latitude Longitude Link 1 Link 2 Link 3 Link 4 Link 5
0 A 34.466667 72.200000 B NaN NaN NaN NaN
1 B 33.766667 72.366667 NaN C D NaN NaN
2 C 33.761500 72.434000 B E G NaN NaN
Объединение всех этих шагов -
datax['temp'] = datax[['Name', 'Link 1']].apply(sorted, axis=1).apply(lambda x: ','.join(map(str, x))).duplicated(keep='first')
datax['Link 1'] = np.where(datax['temp']==True, np.NaN, datax['Link 1'])
datax.drop('temp', axis=1)
Окончательное решение - Мы можем расширить это решение для сравнения каждый из «Link 1», «Link 2», «Link 3» и т. д. c с «Name» и установите столбцы «Link 1», «Link 2», «Link 3» соответственно.
for column in datax[['Link 1','Link 2','Link 3','Link 4','Link 5']]:
datax['temp'] = datax[['Name', column]]\
.fillna('').apply(sorted, axis=1)\
.apply(lambda x: ','.join(map(str, x)))\
.duplicated(keep='first')
datax[column] = np.where(datax['temp']==True, np.NaN, datax[column])
datax.drop('temp', axis=1, inplace=True)
print(datax)
Вывод:
Name Latitude Longitude Link 1 Link 2 Link 3 Link 4 Link 5
0 A 34.466667 72.200000 B NaN NaN NaN NaN
1 B 33.766667 72.366667 NaN C D NaN NaN
2 C 33.761500 72.434000 B E G NaN NaN
Дайте мне знать, если это поможет !!