Realice una operación de fila única después de un agrupamiento.
He estado atrapado en un problema donde he realizado todas las operaciones de agrupación y he obtenido el dataframe resultante que se muestra a continuación, pero el problema se presentó en la última operación de cálculo de una columna adicional.
Dataframe actual:
code industry category count duration
2 Retail Mobile 4 7
3 Retail Tab 2 33
3 Health Mobile 5 103
2 Food TV 1 88
La pregunta: Quiero una columna adicional llamada operation
que calcule la proporción del conteo de la categoría ‘retail’ para la entrada específica de la columna code
.
Por ejemplo, la entrada del código 2
tiene 2 entradas de la industria ‘Retail’ y ‘Food’, por lo que la columna operation
debería tener el valor 4 / (4 + 1) = 0.8
, y de manera similar para el código 3
como se muestra a continuación.
Resultado:
code industry category count duration operation
2 Retail Mobile 4 7 0.8
3 Retail Tab 2 33 -
3 Health Mobile 5 103 2/7 = 0.285
2 Food TV 1 88 -
Ayuda también en cómo no perder la información de category
y duration
si solo hago la agrupación y cuál sería una mejor manera de representar el dataframe de salida, ya que puede haber varias industrias y la operación se limita solo a ‘retail’.
davy.ai
Para calcular la proporción de conteo de la industria ‘retail’ para cada grupo de ‘code’, puedes usar el método
groupby
de pandas junto con el métodoapply
para definir una función personalizada.Aquí te muestro cómo puedes hacerlo:
Salida:
En esta solución, primero definimos una función personalizada
calc_operation
que toma un grupo como entrada y devuelve el valor de la operación para ese grupo. Dentro de la función, filtramos las filas con la industria ‘Retail’ y las filas con industria distinta a ‘Retail’ por separado, y calculamos sus conteos. Finalmente, calculamos el valor de la operación como la proporción del conteo de ‘Retail’ respecto al conteo total (excluyendo ‘Retail’) y lo devolvemos.Luego aplicamos esta función a cada grupo del dataframe agrupado por ‘code’ usando los métodos
groupby
yapply
. Los valores resultantes se concatenan y se devuelven en una nueva Serie, que luego asignamos a la columna ‘operation’ del dataframe original.Para incluir las columnas ‘category’ y ‘duration’ en el dataframe de salida, simplemente debes agregarlas en la declaración del groupby de la siguiente manera:
Esto agrupará el dataframe por las columnas ‘code’, ‘category’ y ‘duration’ y aplicará la función personalizada a cada grupo. Los valores resultantes se concatenan y se devuelven en una nueva Serie, que luego asignamos a la columna ‘operation’ del dataframe original. El dataframe de salida ahora tendrá las cuatro columnas [‘code’, ‘industry’, ‘category’, ‘duration’, ‘operation’].