Cómo encontrar el conteo de un valor específico en una columna de un marco de datos de pandas y utilizarlo para cálculos
Tengo un marco de datos de pandas similar al mencionado a continuación y para todos los valores únicos (Dominio) quiero calcular Count(EV)+Count(PV)+count(DV)+count(GV) donde los valores son = verde / total de valores en ese dominio único.
Dominio | EV | PV | DV | GV | Numerador (parte) | Denominador (parte) | Resultado ideal |
---|---|---|---|---|---|---|---|
KA-BLR | Verde | Azul | Verde | 1 | 6 | 0.166 | |
KA-BLR | Verde | Verde | Azul | 1 | 6 | 0.166 | |
KL-TRV | Verde | Azul | Amarillo | Rojo | 0.5 | 7 | 0.071 |
KL-TRV | Verde | Azul | Azul | 0.5 | 7 | 0.071 | |
KL-COK | Azul | Azul | Amarillo | Verde | 0.25 | 4 | 0.0625 |
TN-CHN | Verde | Azul | 0.5 | 5 | 0.1 | ||
TN-CHN | Verde | Azul | Amarillo | 0.5 | 5 | 0.1 |
Código de muestra
SCORE_GLOBAL = {}
for Dominio in df_RR["Dominio"].unique():
# contar verdes
EV_V = (df_RR['EV'] == 'Verde').sum()
PV_V = (df_RR['PV'] == 'Verde').sum()
DV_V = (df_RR['DV'] == 'Verde').sum()
GV_V = (df_RR['GV'] == 'Verde').sum()
# contar todos los valores excluyendo los nulos
EV = df_RR['EV'].sum()
PV = df_RR['PV'].sum()
DV = df_RR['DV'].sum()
GV = df_RR['GV'].sum()
# calcular el resultado ideal
Numerador = (0.25 * EV_V) + (0.25 * PV_V) + (0.25 * DV_V) + (0.25 * GV_V)
Denominador = EV + PV + DV + GV
try:
SCORE_GLOBAL[Dominio] = Numerador / Denominador
except:
SCORE_GLOBAL[Dominio] = 0
df_RR['Resultado_Global'] = df_RR['Dominio'].map(SCORE_GLOBAL)
Actualmente, esta lógica devuelve el mismo valor para todos los dominios. Por favor, ayúdame a resolverlo.
Gracias de antemano.
davy.ai
El problema en el código actual es que está calculando el conteo de verdes para todos los dominios, pero no para cada dominio específico. Para resolver esto, necesitamos filtrar el data frame para cada dominio único antes de calcular el conteo de verdes.
Podemos modificar el código de la siguiente manera:
Este código actualizado debería calcular correctamente el puntaje general para cada dominio único en el data frame.