Estou procurando uma maneira de fazer o equivalente ao SQL
SELECT DISTINCT col1, col2 FROM dataframe_table
A comparação pandas sql não tem nada sobre distinct
.
.unique()
só funciona para uma única coluna, então suponho que poderia concatá-las ou colocá-las em uma lista / tupla e comparar dessa forma, mas isso parece algo que os pandas deveriam fazer de uma forma mais nativa.
Estou perdendo algo óbvio ou não há como fazer isso?
df.apply(pd.Series.unique)
mas isso não funcionará se o número de valores únicos variar nas colunas, então você teria que construir um dicionário dos nomes das colunas como chaves e os valores únicos como os valoresRespostas:
Você pode usar o
drop_duplicates
método para obter as linhas exclusivas em um DataFrame:Você também pode fornecer o
subset
argumento de palavra - chave se quiser usar apenas certas colunas para determinar a exclusividade. Veja a docstring .fonte
df.drop_duplicates()
por padrão, não é um método local, portanto, retorna um novo DataFrame (deixandodf
inalterado). Este é um comportamento bastante padrão, mas ainda pode ser útil apontar.Tentei soluções diferentes. Primeiro foi:
e funciona bem para dados não objeto Outra maneira de fazer isso e evitar erros (para tipo de colunas de objeto) é aplicar drop_duplicates ()
Você também pode usar SQL para fazer isso, mas funcionou muito devagar no meu caso:
fonte
Não há
unique
método para um df. Se o número de valores exclusivos para cada coluna fosse o mesmo, o seguinte funcionaria:df.apply(pd.Series.unique)
mas se não, você obterá um erro. Outra abordagem seria armazenar os valores em um dicionário que é digitado no nome da coluna:fonte
np.unique(df[['column1','column2']].values)
Para resolver um problema semelhante, estou usando
groupby
:Se isso for apropriado, dependerá do que você deseja fazer com o resultado (no meu caso, eu só queria o equivalente
COUNT DISTINCT
ao mostrado).fonte
Acho que
drop duplicate
às vezes o uso não é tão útil, dependendo do dataframe.Eu achei isto:
E trabalhe para mim!
https://riptutorial.com/pandas/example/26077/select-distinct-rows-across-dataframe
fonte
Você pode pegar os conjuntos de colunas e apenas subtrair o conjunto menor do conjunto maior:
fonte