df = pd.DataFrame({'Col1': ['Bob', 'Joe', 'Bill', 'Mary', 'Joe'],
'Col2': ['Joe', 'Steve', 'Bob', 'Bob', 'Steve'],
'Col3': np.random.random(5)})
Qual é a melhor maneira de retornar os valores exclusivos de 'Col1' e 'Col2'?
A saída desejada é
'Bob', 'Joe', 'Bill', 'Mary', 'Steve'
df1.groupby(['A','B']).size().reset_index().rename(columns={0:'count'})
Respostas:
pd.unique
retorna os valores exclusivos de uma matriz de entrada, coluna ou índice DataFrame.A entrada para esta função precisa ser unidimensional, portanto, várias colunas precisarão ser combinadas. A maneira mais simples é selecionar as colunas desejadas e exibir os valores em uma matriz NumPy achatada. Toda a operação é assim:
Observe que
ravel()
é um método de matriz que retorna uma visualização (se possível) de uma matriz multidimensional. O argumento'K'
diz ao método para nivelar a matriz na ordem em que os elementos são armazenados na memória (os pandas normalmente armazenam matrizes subjacentes na ordem contígua ao Fortran ; colunas antes das linhas). Isso pode ser significativamente mais rápido do que usar a ordem 'C' padrão do método.Uma maneira alternativa é selecionar as colunas e passá-las para
np.unique
:Não há necessidade de usar
ravel()
aqui, pois o método manipula matrizes multidimensionais. Mesmo assim, é provável que isso seja mais lento do quepd.unique
quando usa um algoritmo baseado em classificação, em vez de uma hashtable para identificar valores únicos.A diferença de velocidade é significativa para DataFrames maiores (especialmente se houver apenas alguns valores exclusivos):
fonte
pd.DataFrame(unique_values)
,. Não há uma boa maneira de recuperar um DataFrame diretamente.Eu configurei um
DataFrame
com algumas seqüências de caracteres simples em suas colunas:Você pode concatenar as colunas nas quais está interessado e chamar a
unique
função:fonte
Ou:
fonte
Uma solução atualizada usando o numpy v1.13 + requer a especificação do eixo no np.unique se estiver usando várias colunas; caso contrário, a matriz será achatada implicitamente.
Esta alteração foi introduzida em novembro de 2016: https://github.com/numpy/numpy/commit/1f764dbff7c496d6636dc0430f083ada9ff4e4be
fonte
Não
pandas
solução: usando set ().Resultado:
fonte
para aqueles de nós que amam todas as coisas que os pandas aplicam, e claro, as funções lambda:
fonte
aqui está outra maneira
fonte
A saída será ['Mary', 'Joe', 'Steve', 'Bob', 'Bill']
fonte