Есть ли способ найти дедупликацию данных в двух столбцах pandas?

#python #pandas

#питон #панды

Вопрос:

Дедупликация данных в двух столбцах pandas. Данные в pandas могут быть неуместны, а некоторые из них являются нулевыми.

 Person    Name1        Name2  
0          Jet         NaN 
1          Edward      Lach  
2          NaN         Jet
3          Lach        Edward
 

Создание списков для Name1 и Name2 и посмотреть, существуют ли они. Есть ли лучший способ сделать это?

 set1,set2 = list(df["Name1"]),list(df["Name2"])



Expected
Person    SurName    FirstName  
0          Jet         NaN  
1          Edward      Lach
 

Ответ №1:

Используйте numpy.sort с заменой отсутствующих значений на DataFrame.fillna , создайте конструктор DataFrame для возможного вызова DataFrame.duplicated и фильтруйте boolean indexing с помощью обратной маски by ~ :

 mask = (pd.DataFrame(np.sort(df[['Name1','Name2']].fillna('missing'), axis=1), index=df.index)
          .duplicated())

df = df[~mask]
print (df)
   Person   Name1 Name2
0       0     Jet   NaN
1       1  Edward  Lach
 

Комментарии:

1. Привет. Применим ли этот метод и к числам? Предположим, что у нас есть 10 столбцов чисел. Предположим, что каждая строка чисел имеет шансы на дублирование.

2. @MrSimple Я думаю, да, только лучше изменить .fillna('missing') на какое-то число, например .fillna(0) или .fillna(-1)