es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Agrupación múltiple por columna con Pandas para encontrar el valor máximo de cada grupo.

Tengo un dataframe como el siguiente:

Feature value frequency label
age45andabove No 2700 negative
age45andabove No 1707 positive
age45andabove No 83 other
age45andabove Yes 222 negative
age45andabove Yes 15 positive
age45andabove Yes 8 other
age45andabove [Null] 323 negative
age45andabove [Null] 8 other
age45and_above [Null] 5 positive
talk No 20 negative
talk No 170 positive
talk No 500 other
talk Yes 210 negative
talk Yes 1500 positive
talk Yes 809 other
talk [Null] 234 negative
talk [Null] 43 other
talk [Null] 85 positive

y así sucesivamente.

Para cada grupo de características, quiero encontrar la frecuencia máxima con todos sus datos de fila relacionados, por ejemplo, si la característica es age_45_and_above, entonces buscando el grupo NO tenemos 3 filas con diferentes frecuencias y etiquetas, quiero informar la máxima con sus datos relacionados.

He intentado agrupar de diferentes maneras:

result.groupby([‘Feature’, ‘Value’])[‘Frequency’, ‘Predict’].max()

o este otro, con este, estoy obteniendo un dataframe de multiíndice que no son los resultados deseados:

result.groupby([‘Feature’, ‘Value’, ‘Predict’])[‘Frequency’].max()

y muchos intentos fallidos con idxmax, transfrom y ….

La salida prevista que busco se parece a la siguiente:

Feature value frequency label
age45andabove No 2700 negative
age45andabove Yes 222 negative
age45and_above [Null] 323 negative
talk No 500 other
talk Yes 1500 positive
talk [Null] 234 negative

Además, me pregunto cómo sumar las frecuencias para cada grupo de <<característica-valor>> excepto la fila máxima ya que no sé cómo localizar la fila máxima, como en aquí para la primera característica y valor, <>, la máxima es 2700, por lo que la suma sería 1707+83.

Gracias por su tiempo.</característica-valor>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Puedes utilizar los métodos groupby e idxmax para obtener la salida deseada.

    Primero, agrupa el dataframe por Feature y Value:

    result.groupby(['Feature', 'Value'])

    Luego, utiliza idxmax para encontrar la fila con mayor frecuencia para cada grupo:

    result.groupby(['Feature', 'Value'])['Frequency'].idxmax()

    Finalmente, utiliza el índice de idxmax para seleccionar las filas con la máxima frecuencia:

    result.loc[result.groupby(['Feature', 'Value'])['Frequency'].idxmax()]

    Para sumar las frecuencias para cada grupo de , puedes utilizar el método sum:

    result.groupby(['Feature', 'Value'])['Frequency'].sum()

Comments are closed.