Encuentre los valores únicos en una columna y luego ordénelos

82

Tengo un marco de datos de pandas. Quiero imprimir los valores únicos de una de sus columnas en orden ascendente. Así es como lo estoy haciendo:

import pandas as pd
df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].unique()
print a.sort()

El problema es que obtengo un Noneresultado.

MAS
fuente
4
a.sort()modifica ay no devuelve nada, así que reemplace por:a.sort(); print a
stellasia

Respuestas:

120

sorteddevuelve una nueva lista ordenada de los elementos en iterable.

CÓDIGO

import pandas as pd
df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].unique()
print sorted(a)

SALIDA

[1, 2, 3, 6, 8]
Vineet Kumar Doshi
fuente
19

sort ordena en su lugar, por lo que no devuelve nada:

In [54]:
df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].unique()
a.sort()
a

Out[54]:
array([1, 2, 3, 6, 8], dtype=int64)

Entonces tienes que print avolver a llamar después de la llamada a sort.

P.ej.:

In [55]:
df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].unique()
a.sort()
print(a)

[1 2 3 6 8]
EdChum
fuente
11

También puede usar drop_duplicates () en lugar de unique ()

df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].drop_duplicates()
a.sort()
print a
Meloun
fuente
3
Se encontró drop_duplicates()que es 3 veces más rápido que unique () en un marco de datos de 14107693 filas [Pandas 0.18]
fixxxer
7

Prefiero el delineador:

print(sorted(df['Column Name'].unique()))
MDMoore313
fuente
6

Encontré la pregunta yo mismo hoy. Creo que la razón por la que su código devuelve 'Ninguno' (exactamente lo que obtuve al usar el mismo método) es que

a.sort()

está llamando a la función de clasificación para mutar la lista a. A mi entender, este es un comando de modificación. Para ver el resultado, debe usar print (a).

Mi solución, ya que traté de mantener todo en pandas:

pd.Series(df['A'].unique()).sort_values()
Bowen Liu
fuente
Me gusta la pandassolución porque pone NaNvalores al final y funciona con matrices de tipos mixtos.
HS-nebulosa
4

Sugeriría usar el tipo de numpy, ya que de todos modos es lo que hacen los pandas en segundo plano:

import numpy as np
np.sort(df.A.unique())

Pero hacer todo en pandas también es válido.

Challensois
fuente
0

Otra forma es usar el tipo de datos establecido .

Algunas características de los conjuntos : los conjuntos están desordenados, pueden incluir tipos de datos mixtos, los elementos de un conjunto no se pueden repetir, son mutables.

Resolviendo tu pregunta:

df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
sorted(set(df.A))

La respuesta en el tipo de lista :

[1, 2, 3, 6, 8]
Iván Carrasco Quiroz
fuente