8
respostas

Buggey na hora de pesquisar um valor no meu df

Então... eu tava indo bem mas travei aqui Eu dei um

orgs.groupby(['Country']).count()

Me veio um df bacana, por pais, mas eu preciso saber um descritivo de uma outra variável depois desse numero: Contas Me deu lá do DF que o pais: Vietnam, 'serie' Contas aparece no número 137. Eu sei meu df tem 6 donos possíveis, mas eu preciso saber (quem) quantos estão nesse grupo de 137 donos...

E isso será um constante, porque há outras variáveis que eu vou precisar que será o DONO para poder recomendar uma ação em cada uma das suas respectivas rows!

Alguém me ajuda?

8 respostas

Olá Luiz tudo bem com você??

Eu não consegui entender muito bem o que você precisa...seria interessante se você pudesse compartilhar seu note comigo, assim com o seu dataset, para que eu consiga visualizar o problema e consiga te ajudar. Você consegue disponibilizar através do google drive passando o link para o arquivo.

Deixarei aqui para facilitar seu entendimento a documentação técnica referente aos comandos utilizados:

.groupby(): Agrupa combinando objetos separados para aplicação de funções, gerando novos resultados.

.count: Conta as células de cada coluna ou linha que não possuam valores NA (None, NaN e NaT).

Fico no aguardo

Olá Victor

https://drive.google.com/drive/folders/100M6fo0ZVU_jdn66sl1PgrNYY729N6J8?usp=sharing

Segue o dataset e o notebook que estou trabalhando. Ele não está tão bem documento, mas para o exercício vale a pena compartilhar

O problema é esse database é mantido por vários usuários, uns mais preguiçosos outros menos. Eu precisa saber quantas empresas estão sem o endereço ( pelos menos o pais e a cidade) por Owner.

Eu já substitui os NAN, para eu preciso saber para acionar os Owners a corrigirem suas informações. Eu falo pro cara, há você precisa preencher pelo menos a cidade e o pais dos seus clientes. Ai ele em diz, "mas quais são os clientes que estão sem cidade e pais?"

Na verdade são filtros que eu preciso criar para que o dataset seja pontualmente corrigido!

Olá Luiz, eu estou analisando o seu note.

Pensando na sua necessidade exposta "Eu precisa saber quantas empresas estão sem o endereço ( pelos menos o pais e a cidade) por Owner."

Essa limpeza que ocorreu aqui, dificulta que você tenha acesso a resposta que busca.

Delete the columns that brings irrelevante information for the analisys we make witht the data frame

orgs.drop(orgs.columns[[0,1,7,8,9,1,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-2,-3]], axis=1, inplace=True)

orgs.drop(orgs.columns[[-2,-3]], axis=1, inplace=True)

Pois foi retirado do DataSet as informações de endereço e deixado apenas "Cidade", sendo que foi tentado unificar essas colunas, mas elas já haviam sido dropadas anteriormente,

orgs.rename(columns = {'City/town/village/locality': 'City'}, inplace = True)

Então, dessa forma não fica possível obter a resposta buscada.

Tenta revisar essa parte e daí você pode manter as informações de localização que está buscando, mesmo que os dados estejam nulos. Conseguindo ver quantos e quais estão nessas condições, usando o .count, .unique, .drop quando necessário.

Espero ter te ajudado e qualquer dúvida é só retornar aqui!

Olá Victor,

Eu não tenho exatamente o problema com cidades! Até concordo que a forma como eu faço os drops não é a mais elegante, mas o groupby() por países depois funciona bem e me atende. A minha dúvida é mais adiante na análise! Depois até dos tratamentos que eu faço para os NAN Eu faço um groupby () por países e decubro um 'país' ROW com o valor "NOT ASSIGNED" A minha análise agora pega só esse row. Aí eu preciso saber os COMPANY de um segundo group() by por Owner que me resulte uma lista de COMPANY para cada um dos 6 owners.

EU não estou acertando a construção dessa sintaxe! Se você pude me ajudar beleza!

Opa Luiz,

Entenda que eu não conheço o negócio ou dataset a fundo e estou tentando me basear nas necessidades que vc tem levantado e tentado te ajudar.

Com relação a essa nova situação

"Aí eu preciso saber os COMPANY de um segundo group() by por Owner que me resulte uma lista de COMPANY para cada um dos 6 owners."

Nessa parte aqui você tem as "company" com seus respectivos "owner"

orgs.rename(columns = {'Name': 'Company'}, inplace = True)
orgs.rename(columns = {'City/town/village/locality': 'City'}, inplace = True)
orgs

Para você conseguir visualizar essas buscas, sugiro a utilização do .iloc que na documentação técnica do Pandas você encontra .iloc e .groups

Exemplo:

orgs.iloc[orgs.groupby('Owner').groups['Luiz Storino Filho']]

Agora com essa linha de código você consegue ir trocando os "Owner" e ir obtendo os resultados buscados =)

Espero ter te ajudado e qualquer dúvida é só retornar aqui! Bons estudos!

Você tinha total razão quanto aos drops que eu! Arrumei fazendo um segundo dataset melhor estruturado!

simplelist = pd.DataFrame(data = orgs,columns=['Name','Label', 'Owner','City/town/village/locality','State/county', 'Region', 'Country'])
simplelist

Aí sim... OK... simplelist passa a ser o meu df de trabalho sem drops

Agora nessa linha você me passou:

orgs.iloc[orgs.groupby('Owner').groups['Luiz Storino Filho']]

boa...eu consigo ver algumas coisas sim mas deixe-me ser mais específicio na minha duvida

Eu rodo um:

owners = simplelist.Owner.unique()
owners = owners.tolist()
owners

Me sai os 6 owners e eu tenho um conjunto de 348 companies que precisam ser tratadas por que todas trazem um LABEL com valor "UNKNOWN"" Então eu queria saber :

Owner1: 120 e quais a s companies desse owner que ele precisa rever Owner2: 30 e quais a s companies desse owner que ele precisa rever Owner3: 67 e quais a s companies desse owner que ele precisa rever

Acho que ficou melhor explicado aqui.

Opa! Na verdade eu melhorei demais onde eu queria chegar, por favor veja se faz a sentido isso:

error_author.loc[error_author['Owner'] == 'Bertrand Dufresne']

Eu crio um df com o conjunto dos valores errados e roda eles para o número de Owners que eu tenho!

Então esse == que eu dou eu mudo manualmente . Eu na verdade queria criar um loop com a minha lista de Owners e aí eu já roda os erros de cada um em outputs diferentes...

Esse loop é o que eu quero fazer (mas dentro do pandas)

Owners = ['Ze', 'Maria', 'Luiz']

 for  owner in Owners
      error_author.loc[error_author['Owners'] == 'owner']
      to.csv(/user/ ownerZe_errors.csv)

Eu sei que no nome do arquivo eu teria que colocar o nome do owner para gerar a concatenação correta...

Opa Luiz, tenta assim:

Código da imagem está abaixo - laço for

owners = orgs.groupby('Owner').groups.keys()
for owner in owners:
    df_owner = orgs.iloc[orgs.groupby('Owner').groups[owner]]
    df_owner_label_nan = df_owner.loc[df_owner.Label.isnull()]
    df_owner_label_nan.to_excel(owner + "_errors.xlsx", index=False)

Espero ter te ajudado! Bons estudos!