Eu tenho um DataFrame e consigo lê todas colunas. Porem gostaria de colocar celulas iguais na mesma linha e se não houver em uma coluna igual mas nas demais sim coloque um espaço em branco ou nan tanto faz.
exemplo:
| coluna1 coluna2 coluna3 | |||
| a b a | |||
| c a c | |||
| b h b | |||
| reposta que quero: | |||
| coluna1 coluna2 coluna3 | |||
| a a a | |||
| c nan c | |||
| b b b | |||
| nan h nan | |||
Olá Lucas,
Se eu entendi bem, você não está preocupado em tratar os valores repetidos na mesma coluna, dessa forma, o código abaixo pode funcionar:
import pandas as pdimport numpy as np
df = pd.DataFrame(np.array([['a', 'b', 'a'], ['c', 'a', 'c'], ['b', 'h', 'b']]), columns=['coluna1', 'coluna2', 'coluna3'])
valores_unicos = np.unique(df.values)novas_linhas = []for valor in valores_unicos: nova_linha = [] for coluna in list(df.columns): nova_linha.append(valor if valor in list(df[coluna]) else np.NaN) novas_linhas.append(nova_linha) df = pd.DataFrame(novas_linhas, columns=list(df.columns))
Uma breve explicação: inicialmente, pegamos todos os valores únicos do dataframe. Após, criamos cada linha inidividualmente dentro do primeiro for, e para criar a linha fazemos um novo loop pelas colunas. Talvez não a solução mais rápida, mas funciona pro seu exemplo.
Importante ver que isso talvez gere problemas se você tiver valores duplicados na mesma coluna, porém, não sabia qual o comportamento esperado nesse caso :)