df = pd.DataFrame({'Col1': ['Bob', 'Joe', 'Bill', 'Mary', 'Joe'],
'Col2': ['Joe', 'Steve', 'Bob', 'Bob', 'Steve'],
'Col3': np.random.random(5)})
¿Cuál es la mejor manera de devolver los valores únicos de 'Col1' y 'Col2'?
La salida deseada es
'Bob', 'Joe', 'Bill', 'Mary', 'Steve'
df1.groupby(['A','B']).size().reset_index().rename(columns={0:'count'})
Respuestas:
pd.unique
devuelve los valores únicos de una matriz de entrada, o columna o índice de DataFrame.La entrada a esta función debe ser unidimensional, por lo que será necesario combinar varias columnas. La forma más simple es seleccionar las columnas que desee y luego ver los valores en una matriz NumPy aplanada. Toda la operación se ve así:
Tenga en cuenta que
ravel()
es un método de matriz que devuelve una vista (si es posible) de una matriz multidimensional. El argumento'K'
le dice al método que aplaste la matriz en el orden en que los elementos se almacenan en la memoria (los pandas generalmente almacenan las matrices subyacentes en orden contiguo a Fortran ; columnas antes de filas). Esto puede ser significativamente más rápido que usar el orden predeterminado 'C' del método.Una forma alternativa es seleccionar las columnas y pasarlas a
np.unique
:No es necesario usar
ravel()
aquí ya que el método maneja matrices multidimensionales. Aun así, es probable que sea más lento quepd.unique
cuando utiliza un algoritmo basado en clasificación en lugar de una tabla hash para identificar valores únicos.La diferencia de velocidad es significativa para los marcos de datos más grandes (especialmente si solo hay un puñado de valores únicos):
fuente
pd.DataFrame(unique_values)
. No hay una buena manera de recuperar un DataFrame directamente.He configurado un
DataFrame
con algunas cadenas simples en sus columnas:Puede concatenar las columnas que le interesan y llamar a la
unique
función:fuente
O:
fuente
Una solución actualizada que usa numpy v1.13 + requiere especificar el eje en np.unique si se usan varias columnas, de lo contrario, la matriz se aplana implícitamente.
Este cambio se introdujo en noviembre de 2016: https://github.com/numpy/numpy/commit/1f764dbff7c496d6636dc0430f083ada9ff4e4be
fuente
No
pandas
solución: usando set ().Salida:
fuente
para aquellos de nosotros que amamos todas las cosas pandas, aplicamos y, por supuesto, las funciones lambda:
fuente
aquí hay otra manera
fuente
La salida será ['Mary', 'Joe', 'Steve', 'Bob', 'Bill']
fuente