0
respostas

Operacao com groupby

Tenho um dataframe gerado a partir de um arquivo CSV, mais ou menos como a estrutura a seguir:


| Nome | Cargo | Valor |
| -------- | -------- | -------- |
| Jose  | Motorista  | 1000.00  |
| Jose  | Motorista  | 1000.00  |
| Jose  | Mecanico  | 1000.00  |
| Maria | Almoxarife | 500.00  |
| Maria | Limpeza | 500.00  |
|Margarete|Lavanderia|700.00|
|Margarete|Lavanderia|300.00|
|Margarete|Lavanderia|250.00|

Minha intencao é, se um determinado nome ocupar mais de um cargo, todos os cargos ocupados por ele deve se repetir em cada linha, mas apenas se os cargos forem diferentes. Porém, se um mesmo nome ocupar apenas um cargo(caso da funcionaria Margarete acima), essa informação é armazenada de forma única. Repara na tabela abaixo que, se o cargo for diferente, caso do Jose, o resultado deve mostrar "Motorista /Mecanico". Porém, no caso da Margarete, ja que ela ocupa um cargo apenas, o resultado fica apenas "Lavanderia" (e não Lavanderia/Lavanderia/Lavanderia) Segue o resultado pretendido:

| Nome | Cargo | Valor |
| -------- | -------- | -------- |
| Jose  | Motorista /Mecanico | 1000.00  |
| Jose  | Motorista/Mecanico  | 1000.00  |
| Jose  | Motorista/Mecanico  | 1000.00  |
| Maria | Almoxarife/Limpeza | 500.00  |
| Maria | Almoxarife/Limpeza | 500.00  |
|Margarete | Lavanderia | 700.00 |
|Margarete | Lavanderia | 300.00 |
|Margarete | Lavanderia | 250.00 |

Eu fiz umas pesquisas e constatei que, usando o "transform", eu posso concatenar o conteudo de cada linha

df['Cargo'] = df.groupby('Nome')['Cargo'].transform(lambda x: ''.join(x))

Entretanto, eu notei que ele está enfileirando os cargos na coluna Cargo, ficando esta coluna mais ou menos assim:

Cargo

MotoristaMotoristaMecanico....

Isso é lógico, já que ele tá "somando" o conteudo de cada linha. Só que eu quero que não fique repetido. Isto é, que apareça motorista e mecanico apenas uma vez e dessa forma (Motorista/Mecânico). Assim como, no caso da Margarete, fique apenas "Lavanderia".

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software