Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Adicionar no sub-array uma coluna do array original

Professor, tudo bem? Poderia me tirar uma dúvida? Esse é o array original:

INDEXC1C2C3C4
L11234
L25678
L39101112
L412131415

Este é o sub-array

INDEXC1C2
L256
L3910

Veja que meu sub-array não possui as colunas c3 e c4, possui apenas duas linhas e o index não sofrei qualquer alteração. Qual é a melhor maneira de adicionar a coluna c3 do array original ao sub-array tendo apenas o index como referência? Resultado esperado:

INDEXC1C2C3
L2567
L391011
1 resposta
solução!

Bom dia Eduardo, tudo bem?

Existem algumas abordagens para esse problema, e uma delas é utilizando a função .loc ou .iloc, que possuem objetivos semelhantes, conforme exemplo abaixo

1 - Definindo o Array Original e o Sub-Array

import pandas as pd
import numpy as np

# Criando o DataFrame mencionado

array = np.arange(1,17).reshape(4, 4)
index = ['L'+str(i+1) for i in range(4)]
columns = ['C'+str(i+1) for i in range(4)]

df_original = pd.DataFrame(data = array, index=index, columns=columns)
df_original.loc['L4'] = np.arange(12, 16)
df_original

Saída:

C1C2C3C4
L11234
L25678
L39101112
L412131415
# Criando o sub-DataFrame 

sub_array = df_original.loc[['L2', 'L3'], ['C1', 'C2']]
sub_array

Saída:

C1C2
L256
L3910

2 - Adicionando a coluna deseja (C3) utilizando iloc:

# Utilizando iloc
sub_array['C3'] = df_original.iloc[1:3, 2]
sub_array

sub_array

O que estamos fazendo no código acima é pegando os dados presentes nas linhas L2 e L3 (que correspondem aos índices 1 e 2, lembrando que trata-se de um slice, logo o 3 é não incluso) e a coluna C3 do DataFrame original, que corresponde ao índice 2 passado após a vírgula, e jogando em uma nova coluna do nosso sub_array, que estamos chamando de C3.

Saída:

C1C2C3
L2567
L391011

3 - Adicionando a coluna deseja (C3) utilizando loc:

# Utilizando o loc

sub_array['C3'] = df_original.loc['L2': 'L3', 'C3']
sub_array

Semelhantemente ao código com oiloc, aqui com o loc estamos pegando os dados presentes da linha L2 até a linha L3 e a coluna C3 do DataFrame original, e jogando em uma nova coluna do nosso sub_array, que estamos chamando de C3.

Saída:

C1C2C3
L2567
L391011

Explicando um pouquinho sobre as funções loc e iloc: elas permitem selecionar subconjuntos de linhas e colunas de um DataFrame usando rótulos (loc) ou inteiros (iloc). Em ambas as funções, antes de vírgula refere-se às linhas e após a vírgula refere-se às colunas. Como mostrado acima, é permitido fazer slice (fatiamento) dentro de ambas as funções tanto para as linhas como para as colunas, só atenção a um pequeno detalhe: fazendo slice na função iloc o limite superior é não incluso (é o caso do 3 no nosso exemplo), porém na função loc o limite superior é incluso (é o caso do L3 no nosso exemplo).

Caso tenha interesse você pode ver mais sobre as duas funções nesse artigo Como usar loc e iloc no pandas? ou na documentação do loc e do iloc, caso queira dar uma olhada.

Espero ter ajudado. Qualquer dúvida estou sempre à disposição!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!