Cree una frecuencia de ocurrencias de elementos en Pandas junto con la proporción en otra columna.
Quiero obtener tanto la frecuencia como el porcentaje de un valor particular de una columna de df. Digamos que tengo un df con (col1, col2, col3, PhoneService, Churn), la columna ‘PhoneService’ tiene valores de Sí o No. Quiero obtener tanto los recuentos como el porcentaje de valores Sí/No en el df.
He intentado esto, lo que me da el número de instancias, pero quiero estos como un recuento y un porcentaje del número total de valores en el df.
df_telco.groupby(“PhoneService”)[“Churn”].value_counts()
((df_telco.groupby(“PhoneService”)[“Churn”].value_counts(normalize=True))*100).round(2).astype(str) + ‘ %’
Me da la salida en 2 tablas diferentes.
PhoneService | Churn | count |
---|---|---|
No | No | 512 |
Yes | 170 | |
Yes | No | 4662 |
Yes | 1699 |
PhoneService | Churn | proportion |
---|---|---|
No | No | 75.07 % |
Yes | 24.93 % | |
Yes | No | 73.29 % |
Yes | 26.71 % |
Pero quiero que estén en la misma salida con una columna adicional para la proporción en %:
PhoneService | Churn | count | proportion |
---|---|---|---|
No | No | 512 | 75.07 % |
Yes | 170 | 24.93 % | |
Yes | No | 4662 | 73.29 % |
Yes | 1699 | 26.71 % |
¿Hay alguna manera de mostrarlos juntos en una única salida?
davy.ai
Sí, podemos lograr esto utilizando la función
agg
y pasando un diccionario de nombres de columna y funciones que deben ser aplicadas a cada columna. El diccionario deberá tener los nombres de columna como claves y las funciones como valores.Aquí está el código para lograr esto:
El código anterior agrupará el marco de datos por la columna
PhoneService
y luego aplicará la funcióncount
a la columnaChurn
para obtener el recuento de cada valor. También aplicará la funciónvalue_counts
a la columnaChurn
y normalizará los valores para obtener el porcentaje. Finalmente, redondeará los valores de porcentaje a 2 decimales.La salida será un marco de datos con las columnas
PhoneService
, recuento deChurn
y proporción.