1
resposta

[Dúvida] Criar coluna condicional usando como condição uma coluna de outro DataFrame

Pessoal,

Tenho dois DataFrames (''data_prep" e "siglas"). No data_prep existe uma coluna chamada "estación_" em que tenho o nome de algumas localidades. No siglas também tenho uma coluna chamada "estación_" que deveria ter as mesma localidades contidas no data_prep e mais algumas, além de uma coluna ao lado chamada "acrónimo_estación".

Eu estou tentando criar uma coluna chamada "sigla" no data_prep que será preenchida com o acrônimo de acordo com o conteúdo do DataFrame siglas.

Conteúdo do DF data_prep:

;;;;;;;;;;;;;;;;
Índice punto;Estación ;Tipo ;Equipo de Origen;Descripción del punto;"Tipo de punto
TC/TK/TM";Tipo de señal;Valor Minimo;Descripcion del Valor = 1;Descripcion del Valor = 0;Dirección IEC-104 SCADA;IEC-104 Data Type SCADA;Dirección IP;Revisón;Observaciones Sener Integración ;Comentarios Fonatur Estaciones;Comentarios CMR
1;Palenque ;REAL;"Controlador 
Seccionador";Temperatura TR-01;TM;Medición;-25°C / 150°C;-25°C;150°C;;IEC-104;;A;;;
2;Palenque ;REAL;"Controlador 
156;Tenabo;REAL;Tablero de distribución 4;Reservas;TM;Medición;Valor;-;-;;IEC-104;;A;;;
157;Tenabo;BOOL;Tablero de distribución 4;Reservas;TK;Estado;0 / 1;-;-;;IEC-104;;A;;;
158;Tenabo;BOOL;Tablero de distribución 4;Reservas;TK;Estado;0 / 1;-;-;;IEC-104;;A;;;
65;Izamal;REAL;Controlador Motogenerador;Frecuencia ;TM;Medición;45 Hz / 70 Hz;45 Hz;70 Hz;;IEC-104;;A;;;
66;Izamal;REAL;Controlador Motogenerador;Nivel de diesel;TM;Medición;0% / 100 %;0%;100%;;IEC-104;;A;;;
83;Felipe Carrillo Puerto ;REAL;Sistema de transferencia;Reservas;TM;Medición;Valor;-;-;;IEC-104;;A;;;
104;;A;;;
81;Nicolas Bravo;BOOL;Sistema de transferencia;Entrada B. Abierto;TK;Estado;0 / 1;Activado=1;NO Activado=0;;IEC-104;;A;;;
82;Nicolas Bravo;BOOL;Sistema de transferencia;Entrada B. Cerrado;TK;Estado;0 / 1;Activado=1;NO Activado=0;;IEC-104;;A;;;
83;Nicolas Bravo;REAL;Sistema de transferencia;Reservas;TM;Medición;Valor;-;-;;IEC-104;;A;;;
84;Nicolas Bravo;REAL;Sistema de transferencia;Reservas;TM;Medición;Valor;-;-;;IEC-104;;A;;;
85;Nicolas Bravo;BOOL;Sistema de transferencia;Reservas;TK;Estado;0 / 1;-;-;;IEC-104;;A;;;
86;Nicolas Bravo;BOOL;Sistema de transferencia;Reservas;TK;Estado;0 / 1;-;-;;IEC-104;;A;;;
87;Nicolas Bravo;BOOL;Sistema de transferencia;Reservas;TK;Alarma;0 / 1;-;-;;IEC-104;;A;;;
88;Nicolas Bravo;BOOL;Sistema de transferencia;Reservas;TK;Alarma;0 / 1;-;-;;IEC-104;;A;;;
89;Nicolas Bravo;REAL;Tablero de distribución 1;Tensión Fase 1;TM;Medición;20 V / 400 V;20 V;400 V;;IEC-104;;A;;;

Conteúdo do DF siglas:

"- TM-GEN-SYS-D500-PL-A00-00060-D_Esquema de instalaciones ferroviarias_2022 10 04
-TM-GEN-SYS-D100-ES-A00-00149-B Reglas de codificación de equipos e instalaciones";;;
Tramo 1;ID;Nombre Estación;Acrónimo Estación
T1;1;Palenque;PAL
T1;2;Nudo de Palenque;NPA
T1;3;Ladero 1;L11
T1;4;Caseta Tetra 1;T11
T1;5;Caseta Tetra 2;T12
T1;6;Ladero 2;L12
T1;7;Boca del Cerro;BOC
T1;8;Base de Mantenimiento 1;BM1
T1;9;Tenosique;TEN
T1;10;Ladero 3;L13
T1;11;Caseta Tetra 3;T13
T1;12;Ladero 4;L14
T1;13;El Triunfo;ETR
T1;14;Ladero 5;L15
T1;15;Ladero estación;L18
T1;16;Candelaria;CAD
T1;17;Ladero 6;L16
T1;18;Ladero 7;L17
T1;19;Caseta Tetra 4;T14
T1;20;Talleres y cocheras Escárcega;TCE
T1;21;Desvío Bacalar;DBA
T1;22;Escárcega;ESC
T2;23;Caseta Tetra 1;T21
T2;24;Caseta Tetra 2;T22
T2;25;Ladero 1;L21
T2;26;Caseta Tetra 3;T23
T2;27;Ladero 2;L22
T2;28;Carrillo Puerto;CRP
T3;29;Caseta Tetra 4;T24
T2;30;Ladero 3;L23
T2;31;Ladero 4;L24
T2;32;Caseta Tetra 5 ;T25
T2;33;Ladero 5;L25
T2;34;Caseta Tetra 6;T26
T2;35;Base de Mantenimiento 2;BM2
T2;42;Ladero 7;L27
T2;43;Tenabo;TNB
T2;44;Ladero 8;L28
T2;45;Hecelchakán;HEC
T3;46;Calkiní;CAL
T3;47;Ladero 1;L31
T3;48;Maxcanú;MAX
T3;49;Ladero 2;L32
T3;50;Umán;UMA
T3;51;Ladero 3;L33
T3;52;Caseta Tetra 1;T31
T3;53;Cocheras de Mérida;CDM
T3;54;Base de Mantenimiento 3;BM3
T3;55;Mérida Teya;MET
T3;56;Ladero 4;L34
T3;57;Tixkokob;TIX
T3;58;Ladero estación;L35
T3;59;Puesto de Banalizacion Tixkokob-Izamal;PBI
T3;60;Izamal;IZA
T4;61;Caseta Tetra 1;T41
T4;62;Cortavías Izamal – Chichén-Itzá;PBC
T4;63;Ladero 1;L41
T4;64;Estación Chichén Itzá;CHI
T4;65;Caseta Tetra 2;T42
T4;66;Ladero 2;L42
T4;67;Caseta Tetra 3;T43
T4;68;Valladolid;VAL
T4;69;Base de Mantenimiento 4;BM4
T4;70;Caseta SIG 7103+441,27;CSIG7103
T4;71;Caseta Tetra 4;T44
T4;72;Ladero 3;L43
T4;73;Caseta Tetra 5;T45
T4;74;Nuevo Xcan;NUX
T4;75;Caseta Tetra 6;T46
T4;76;Ladero 4;L44
T4;77;Caseta Tetra 7;T47
T4;78;Leona Vicario;LEV
T4;79;Nudo a Mercancías Cancún;NMC
T4;80;Caseta Tetra 8;T48
T4;81;Ladero 5;L45
T4;82;Caseta SIG 7243+427,730;CSIG7243
T4;83;Caseta Tetra;T49
T4;84;Cancún Aeropuerto;CAE
T4;85;Talleres y/o Cocheras de Cancún;TCA
T5;86;Ladero S/N 5221+000;LS/N5221
T5;87;Ladero 3;L53
T5;90;Base de Mantenimiento 5 Norte;BM5
T5;91;Caseta Tetra 1;T51
T5;99;Tulum;TUL
T5;100;Ladero S/N 5089+000;LS/N5089
T5;101;Cocheras Tulum;CTU
1 resposta

Continuando a pergunta por aqui, meu código está assim:

import pandas as pd
from IPython.display import display, HTML
import numpy as np
display(HTML("<style>.container {width:90% !important;}</style>"))
siglas = pd.read_csv('data/Siglas.csv', sep = ';')
dados = pd.read_csv('data/IEC104_TEN.csv', sep =';')
cab = dados.loc[0]
dados.columns = cab
cab = siglas.loc[0]
siglas.columns = cab
siglas = siglas.drop(0)
siglas.columns = siglas.columns.str.lower().str.replace(' ', '_')
siglas = siglas.rename(columns = {'nombre_estación' : 'estación_'})
siglas
data_prep = dados
data_prep.columns = data_prep.columns.str.lower().str.replace(' ', '_')
data_prep.drop(columns=['dirección_iec-104_scada', 'iec-104_data_type_scada', 'dirección_ip', 'revisón', 'observaciones_sener_integración_', 'comentarios_fonatur_estaciones', 'comentarios_cmr'], inplace = True)
data_prep = data_prep.drop(0)
data_prep
data_prep['Variable_Type'] = 'NaN'

for index, row in data_prep.iterrows():
    if row['tipo_de_punto\ntc/tk/tm'] == 'TM':
        data_prep.loc[index,'Variable_Type'] = 'RM'
    elif row['tipo_de_punto\ntc/tk/tm'] == 'TK':
        data_prep.loc[index,'Variable_Type'] = 'RM'
    elif row['tipo_de_punto\ntc/tk/tm'] == 'TC':
        data_prep.loc[index,'Variable_Type'] = 'RC'
    else:
        data_prep.loc[index,'Variable_Type'] = 'Unknow'
ctrl= data_prep[data_prep['índice_punto'].str.contains('Total', na = False)]
ctrl.index
data_prep = data_prep.drop(ctrl.index)
data_prep.shape

Tenho os DFs criados e inclusive já criei a coluna condicional "Variable_Type", mas na hora de criar a coluna "sigla" usando como referência o DF "siglas", nada funciona.

Eu precisaria comparar cada linha do DF data_prep['estacíon_'] e ao encontrá-la no siglas['estación_'], preencher a linha correspondente em data_prep['sigla'] com o valor de siglas['acrónimo_estación']

Já tentei merge, iterrows, for... e nada ajudou