4
respostas

Transformar linha em colunas

Uma dúvida como conseguiria transformar as datas de uma compra e venda em coluna?

data_negociacao    ativo    operacao
0    2020-11-27    ABEVM115    C
1    2020-11-27    ABEVM145    V
2    2020-12-09    ABEVM145    C
3    2021-02-08    ABEVO127    C
4    2021-02-08    ABEVO151    V
ativo operacao data_compra data_venda
0    ABEVM115  C  2020-11-27
1    ABEVM145  V     2020-12-09  2020-11-27
3    ABEVO127  C  2021-02-08
4    ABEVO151  V  2021-02-08
4 respostas

Olá Fabiano! Como você está?

Desculpa, não entendi muito bem o que deseja fazer com sua base de dados.

Se a sua intenção for transformar as linhas da coluna data_negociacao em colunas, é possível fazer isso da seguinte maneira:

A primeira etapa seria transformar sua coluna de data_negociacao no índice (index) do seu dataframe. Para isso, você pode utilizar o comando set_index:

dataset = dataset.set_index('data_negociacao')
dataset

Assim, seu dataframe fica da seguinte maneira:

Imagem do dataframe resultante do código acima, onde a coluna data_negociacao se tornou o novo indice da tabela

Agora, podemos transpor o dataframe, ou seja, transformas as linhas em colunas e as colunas em linhas. Para isso basta utilizar o método T:

 dataset = dataset.T
 dataset

E o resultado fica assim:

Imagem do dataframe resultante do código acima, onde as linhas da coluna data_negociacao se tornaram colunas e as colunas "ativo" e "operacao" se tornaram linhas

E pronto! Agora as datas se tornaram as colunas do dataframe.

Se a sua dúvida não for essa, especifique um pouquinho mais o que deseja fazer, por favor, para que eu possa te ajudar melhor :)

Bons estudos!

Bom dia Milena,

Não seria exatamente isso. Isso eu consegui. Eu queria que ficasse assim:

          ativo            operacao          data_compra      data_venda
0    ABEVM115          C                      2020-11-27
1    ABEVM145          V                      2020-12-09      2020-11-27
3    ABEVO127          C                      2021-02-08
4    ABEVO151          V                      2021-02-08
`

Tipo, tinha duas linhas de ABEVM145 com data de compra e venda. agora ficaria uma linha de ABEVM145 com as datas de compra e venda na coluna. Se tiver apenas uma linha, a data fica na venda ou na compra. Entendeu?

A data nao vira coluna, somente é separada de compra e venda. pois a compra e venda era por linha

Oi Fabiano,

Acho que existe mais de uma forma de fazer isso, mas uma delas seria assim:

pd.merge(
    dados.query('operacao == "C"').drop(['operacao'], axis=1), 
    dados.query('operacao == "V"').drop(['operacao'], axis=1), 
    on='ativo', 
    how='outer',
    suffixes=('_compra', '_venda')
).fillna('').reindex(columns=['ativo', 'data_negociacao_compra', 'data_negociacao_venda'])

Espero ter ajudado