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.


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]

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]

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

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()))

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()

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.


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]
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.