les pandas unique des valeurs de plusieurs colonnes
df = pd.DataFrame({'Col1': ['Bob', 'Joe', 'Bill', 'Mary', 'Joe'],
'Col2': ['Joe', 'Steve', 'Bob', 'Bob', 'Steve'],
'Col3': np.random.random(5)})
Quelle est la meilleure façon de rétablir les valeurs uniques de la "Col1" et "Col2'?
La sortie désirée est
'Bob', 'Joe', 'Bill', 'Mary', 'Steve'
Vous devez vous connecter pour publier un commentaire.
mp.unique
retourne les valeurs uniques à partir d'un tableau d'entrée, ou DataFrame d'index ou de colonne.L'entrée de cette fonction doit être à une dimension, de sorte que plusieurs colonnes doivent être combinées. La façon la plus simple est de sélectionner les colonnes que vous souhaitez, puis d'afficher les valeurs dans un aplatie tableau NumPy. L'ensemble de l'opération ressemble à ceci:
Noter que
ravel()
est une méthode de tableau que retourne une vue (si possible) d'un tableau multidimensionnel. L'argument'K'
indique la méthode pour aplatir le tableau dans l'ordre les éléments sont stockés dans la mémoire (les pandas généralement des magasins de sous-jacents des tableaux dans Fortran contigus afin; les colonnes avant de lignes). Cela peut être beaucoup plus rapide que d'utiliser la méthode par défaut de 'C' ordre.Une autre solution consiste à sélectionner les colonnes et les passer à
np.unique
:Il n'est pas nécessaire d'utiliser
ravel()
ici que la méthode de poignées de tableaux multidimensionnels. Même si, c'est probablement à être plus lent quepd.unique
comme il utilise un tri basé sur l'algorithme plutôt que d'une table de hachage pour identifier les valeurs uniques.La différence de vitesse est important pour les grandes DataFrames (surtout si il ya seulement une poignée de valeurs uniques):
.values
dans votre réponse précédente est nécessaire; sinon elle retournearray(['Col1', 'Col2'], dtype='|S4')
.values
est nécessaire pour certaines versions de Pandas / NumPy (j'ai été le tester cela avec NumPy 1.9.2 et les Pandas 15.2 et il a travaillé sans).pd.DataFrame(unique_values)
. Il n'y a pas de bonne façon de reprendre un DataFrame directement.J'ai mis un
DataFrame
avec quelques simples chaînes de caractères dans les colonnes:Vous pouvez concaténer les colonnes qui vous intéressent et appel
unique
fonction:Ou:
Non-
pandas
solution: à l'aide de set().De sortie:
Une solution mise à jour à l'aide de numpy v1.13+ nécessite de spécifier l'axe np.unique si l'utilisation de plusieurs colonnes, sinon le tableau est implicitement aplati.
Cette modification a été introduite Nov 2016: https://github.com/numpy/numpy/commit/1f764dbff7c496d6636dc0430f083ada9ff4e4be
pour ceux d'entre nous qui aime toutes les choses de pandas, appliquer, et bien sûr lambda fonctions:
La sortie sera
['Marie', 'Joe', 'Steve', 'Bob', 'Loi']
voici une autre façon