Estoy buscando una forma de hacer el equivalente al SQL
SELECT DISTINCT col1, col2 FROM dataframe_table
La comparación de pandas sql no tiene nada sobre distinct
.
.unique()
solo funciona para una sola columna, así que supongo que podría concaminar las columnas, o ponerlas en una lista / tupla y comparar de esa manera, pero esto parece algo que los pandas deberían hacer de una manera más nativa.
¿Me estoy perdiendo algo obvio o no hay forma de hacer esto?
df.apply(pd.Series.unique)
pero esto no funcionará si el número de valores únicos varía entre las columnas, por lo que tendrá que construir un dictado de los nombres de las columnas como claves y los valores únicos como valoresRespuestas:
Puede usar el
drop_duplicates
método para obtener filas únicas en un DataFrame:También puede proporcionar el
subset
argumento de la palabra clave si solo desea utilizar determinadas columnas para determinar la unicidad. Consulte la cadena de documentación .fuente
df.drop_duplicates()
de forma predeterminada no es un método in situ, por lo que devuelve un nuevo DataFrame (df
sin cambios). Este es un comportamiento bastante estándar, pero aún puede ser útil señalarlo.Probé diferentes soluciones. Primero fue:
y funciona bien para datos que no son de objetos. Otra forma de hacer esto y evitar errores (para el tipo de columnas de objetos) es aplicar drop_duplicates ()
También puede usar SQL para hacer esto, pero funcionó muy lento en mi caso:
fuente
No existe un
unique
método para un df, si el número de valores únicos para cada columna fuera el mismo, lo siguiente funcionaría:df.apply(pd.Series.unique)
pero si no, obtendrá un error. Otro enfoque sería almacenar los valores en un dictado que se ingresa en el nombre de la columna:fuente
np.unique(df[['column1','column2']].values)
Para resolver un problema similar, estoy usando
groupby
:Sin embargo, si eso es apropiado dependerá de lo que quieras hacer con el resultado (en mi caso, solo quería el equivalente de lo
COUNT DISTINCT
que se muestra).fuente
Creo que el uso a
drop duplicate
veces no será tan útil dependiendo del marco de datos.Encontré esto:
¡Y trabaja para mí!
https://riptutorial.com/pandas/example/26077/select-distinct-rows-across-dataframe
fuente
Puede tomar los conjuntos de columnas y simplemente restar el conjunto más pequeño del conjunto más grande:
fuente