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 pd
import 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 :)