renomeando as colunas no dataframe com base no nome da coluna adjacente

0
Voto

Meu arquivo csv se parece com a imagem abaixo.

Meu arquivo csv se parece com a imagem abaixo.

Portanto, desejo renomear a colunaXusando a coluna adjacenteslice-0010-EDSR_x2. Portanto, o novo nome da coluna X deve serslice-0010-EDSR_x2_X E o nome dessa coluna slice-0010-EDSR_x2 deve serslice-0010-EDSR_x2_Y . E cooresponding para todas as outras colunas

Então, eu quero renomear a colunaXX usando a coluna adjacenteslice-0010-EDSR_x2slice-0010-EDSR_x2. Portanto, o novo nome da coluna X deve serslice-0010-EDSR_x2_Xslice-0010-EDSR_x2_X E esta coluna slice-0010-EDSR_x2 name deve serslice-0010-EDSR_x2_Yslice-0010-EDSR_x2_Y . E correspondendo a todas as outras colunas

Isso é possível?

Isso é possível?

digite a descrição da imagem aqui

insira a descrição da imagem aquiinsira a descrição da imagem aqui

Fonte

dataframe python pandas rename multiple columns

2 Respostas
1
Voto

Você pode converter colunas em uma matriz numpy, porque o índice não suporta operações mutáveis ​​e define valores por posições:

df=pd.DataFrame(np.random.randint(10, size=(6,5)), 
                  columns=['Contour' ,'X','slice-0011-EDSR' ,'X','slice-1010-EDSR'])
print (df)
   Contour  X  slice-0011-EDSR  X  slice-1010-EDSR
0        0  5                3  5                1
1        2  1                5  6                0
2        4  3                0  7                9
3        9  5                8  4                5
4        0  2                8  6                7
5        5  7                8  9                9

cols=df.columns.to_numpy()
cols[1::2]=cols[2::2] + '_' + 'X'
cols[2::2]=cols[2::2] + '_' + 'Y'
df.columns=cols
print (df) 
   Contour  slice-0011-EDSR_X  slice-0011-EDSR_Y  slice-1010-EDSR_X  \
0        0                  5                  3                  5   
1        2                  1                  5                  6   
2        4                  3                  0                  7   
3        9                  5                  8                  4   
4        0                  2                  8                  6   
5        5                  7                  8                  9   

   slice-1010-EDSR_Y  
0                  1  
1                  0  
2                  9  
3                  5  
4                  7  
5                  9  
Fonte

-Krupali Mistry

0
Voto

Se eu tiver dados de amostra como estes:

df=pd.DataFrame(
    {
        'Contour': range(5),
        'X': range(5, 10),
        'slice-0010-EDSR_x2': range(10, 15),
        'X_': range(5, 10),
        'slice-0011-EDSR_x2': range(10, 15),        
    }
)

então, posso atingir seu objetivo com o seguinte código.

col_names=df.columns.tolist()
new_col_names=[]

for i_col, col in enumerate(col_names):
    if i_col==0:
        new_col=col
    elif col.startswith('X'):
        new_col=col_names[i_col + 1] + '_X'
    else:
        new_col=col + '_Y'
    
    new_col_names.append(new_col)
    
df.columns=new_col_names
print(df)

O resultado é o seguinte:

   Contour  slice-0010-EDSR_x2_X  slice-0010-EDSR_x2_Y  slice-0011-EDSR_x2_X  \
0        0                     5                    10                     5   
1        1                     6                    11                     6   
2        2                     7                    12                     7   
3        3                     8                    13                     8   
4        4                     9                    14                     9   

   slice-0011-EDSR_x2_Y  
0                    10  
1                    11  
2                    12  
3                    13  
4                    14  
Fonte

Você pode interessar

© 2021   OlaMundo.Org