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:
| C1 | C2 | C3 | C4 |
---|
L1 | 1 | 2 | 3 | 4 |
L2 | 5 | 6 | 7 | 8 |
L3 | 9 | 10 | 11 | 12 |
L4 | 12 | 13 | 14 | 15 |
# Criando o sub-DataFrame
sub_array = df_original.loc[['L2', 'L3'], ['C1', 'C2']]
sub_array
Saída:
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:
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:
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!