Voici mes données

Id   feature1  feature2  feature3 feature4 feature5 feature6
1           4         5         7        7        4        5
2           5         6         8        8        5        5

Ce que je veux, c'est que les données dupliquées soient supprimées

Id   feature1  feature2  feature3 feature6
1           4         5         7        5
2           5         6         8        5

Mieux si la duplication est également décrite

feature3 is same with feature4
feature2 is same with feature5

Habituellement, j'utilise un corplot Seaboarn, mais je suis géné quand les fonctionnalités dépassent 100

import seaborn as sns
ax = sns.heatmap(df)
1
Nabih Bawazir 17 avril 2018 à 20:17

3 réponses

Meilleure réponse

Vous pouvez utiliser T puis groupby valeur, notez drop_duplicates et duplicated, ne fournissez pas les paires, ce qui signifie qu'elles redonnent simplement la valeur dupliquée (pas le groupe dupliqué)

s=df.T.reset_index().groupby([0,1])['index'].apply(tuple)
s[s.str.len()>=2].apply(lambda  x : '{0[0]} is same with {0[1]}'.format(x))
Out[797]: 
0  1
4  5    feature1 is same with feature5
7  8    feature3 is same with feature4
Name: index, dtype: object
1
YOBEN_S 17 avril 2018 à 17:39

Vous pouvez utiliser {{X0 }} pour transposer votre trame de données, utilisez drop_duplicates, puis transposez à nouveau votre trame de données:

In [6]: df.T.drop_duplicates().T
Out[6]:
   Id  feature1  feature2  feature3  feature6
0   1         4         5         7         5
1   2         5         6         8         5
1
user3483203 17 avril 2018 à 17:20

Solution possible avec la méthode drop_duplicates () . Cependant, il recherche des lignes, vous devez donc l'appliquer à votre trame de données transposée, puis transposer à nouveau le résultat. Exemple:

data = [
    [4, 5, 7, 7, 4, 5],
    [5, 6, 8, 8, 5, 5],
     ]

columns=['feature1', 'feature2', 'feature3', 'feature4', 'feature5', 'feature6']

df = pd.DataFrame(data, columns)

df.T.drop_duplicates().T

Afin de montrer quelles fonctionnalités sont dupliquées, vous pouvez utiliser la méthode duplicated ()

df.T.duplicated().T

Montrera:

feature1    False
feature2    False
feature3    False
feature4     True
feature5     True
feature6    False
dtype: bool
0
Olzhas Arystanov 17 avril 2018 à 17:36