Je cherche un moyen de faire l'équivalent du SQL
SELECT DISTINCT col1, col2 FROM dataframe_table
La comparaison pandas sql n'a rien à propos de distinct
.
.unique()
ne fonctionne que pour une seule colonne, donc je suppose que je pourrais concaténer les colonnes, ou les mettre dans une liste / tuple et comparer de cette façon, mais cela semble être quelque chose que les pandas devraient faire de manière plus native.
Est-ce que je manque quelque chose d'évident ou n'y a-t-il aucun moyen de le faire?
df.apply(pd.Series.unique)
mais cela ne fonctionnera pas si le nombre de valeurs uniques varie d'une colonne à l'autre, vous devrez donc construire un dict des noms de colonnes en tant que clés et des valeurs uniques en tant que valeursRéponses:
Vous pouvez utiliser la
drop_duplicates
méthode pour obtenir les lignes uniques dans un DataFrame:Vous pouvez également fournir l'
subset
argument mot - clé si vous souhaitez utiliser uniquement certaines colonnes pour déterminer l'unicité. Voir la docstring .la source
df.drop_duplicates()
par défaut, ce n'est pas une méthode inplace, donc renvoie un nouveau DataFrame (en laissantdf
inchangé). C'est un comportement assez standard, mais qui peut encore être utile.J'ai essayé différentes solutions. Le premier était:
et cela fonctionne bien pour les données non-objet Une autre façon de faire cela et d'éviter les erreurs (pour le type de colonnes objet) est d'appliquer drop_duplicates ()
Vous pouvez également utiliser SQL pour ce faire, mais cela a fonctionné très lentement dans mon cas:
la source
Il n'y a pas de
unique
méthode pour un df, si le nombre de valeurs uniques pour chaque colonne était le même, alors ce qui suit fonctionnerait:df.apply(pd.Series.unique)
mais sinon, vous obtiendrez une erreur. Une autre approche serait de stocker les valeurs dans un dict qui est indexé sur le nom de la colonne:la source
np.unique(df[['column1','column2']].values)
Pour résoudre un problème similaire, j'utilise
groupby
:Cependant, si cela est approprié dépendra de ce que vous voulez faire avec le résultat (dans mon cas, je voulais juste l'équivalent de
COUNT DISTINCT
comme indiqué).la source
Je pense que l'utilisation
drop duplicate
ne sera parfois pas si utile en fonction du dataframe.J'ai trouvé ça:
Et travaille pour moi!
https://riptutorial.com/pandas/example/26077/select-distinct-rows-across-dataframe
la source
Vous pouvez prendre les ensembles de colonnes et simplement soustraire le plus petit ensemble du plus grand ensemble:
la source