Estou usando o pandas como um substituto do db, pois tenho vários bancos de dados (oracle, mssql, etc.) e não consigo fazer uma sequência de comandos para um equivalente SQL.
Eu tenho uma tabela carregada em um DataFrame com algumas colunas:
YEARMONTH, CLIENTCODE, SIZE, .... etc etc
No SQL, contar a quantidade de clientes diferentes por ano seria:
SELECT count(distinct CLIENTCODE) FROM table GROUP BY YEARMONTH;
E o resultado seria
201301 5000
201302 13245
Como posso fazer isso em pandas?
value_counts
pode ser a resposta que você está procurando: pandas.pydata.org/pandas-docs/stable/generated/…Respostas:
Eu acredito que é isso que você quer:
Exemplo:
fonte
nunique
? Por mais que eu tente, não consigo encontrar uma maneira, pois o resultado desta resposta é aSeries
, não aDataFrame
.Aqui está outro método, muito simples, digamos que o nome do seu quadro de dados seja
daat
e o nome da coluna sejaYEARMONTH
fonte
DISTINCT
requisito da pergunta! Além disso, não inclui contagens deNaN
!Curiosamente, muitas vezes
len(unique())
é algumas vezes (3x-15x) mais rápido quenunique()
.fonte
.CLIENTCODE.apply(lambda x: len(x.unique()))
, a partir daquiapply
ligação com uma lambda. Por exemplodf.groupby('YEARMONTH')['CLIENTCODE'].apply(lambda x: x.unique().shape[0])
,.len(df['column'].unique())
nenhuma necessidade para a função lambdaTypeError: object of type 'method' has no len()
doChen's
comentário,3novak's
trabalhei para mim.Usando
crosstab
, isso retornará mais informações do quegroupby
nunique
Depois de um pouco de modificação, produza o resultado
fonte
YEARMONTH
ecount
. Também posso definir a contagem em ordem decrescente?Também estou usando,
nunique
mas será muito útil se você precisar usar uma função agregada como'min', 'max', 'count' or 'mean'
etc.fonte
Com a nova versão do pandas, é fácil obter o dataframe
fonte
Aqui, uma abordagem para ter contagem distinta em várias colunas. Vamos ter alguns dados:
Agora, liste as colunas de interesse e use groupby em uma sintaxe ligeiramente modificada:
Nós obtemos:
fonte
Distinta da coluna junto com agregações em outras colunas
Para obter o número distinto de valores para qualquer coluna (
CLIENTCODE
no seu caso), podemos usarnunique
. Podemos passar a entrada como um dicionário naagg
função, juntamente com agregações em outras colunas:fonte