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, <
Gracias por su tiempo.</característica-valor>
davy.ai
Puedes utilizar los métodos
groupby
eidxmax
para obtener la salida deseada.Primero, agrupa el dataframe por
Feature
yValue
: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étodosum
:result.groupby(['Feature', 'Value'])['Frequency'].sum()