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.

Agregue el DataFrame a una sola fila utilizando diferentes funciones.

Tengo un dataframe con varias filas que me gustaría resumir, por columna, en un dataframe de 1 sola fila utilizando una función diferente por columna.

Tomemos el siguiente dataframe como ejemplo:

df = pd.DataFrame([[1,2], [2,3]], columns=['A', 'B'])
print(df)

Resultado:

   A  B
0  1  2
1  2  3

Me gustaría resumir la primera columna usando la función sum y la segunda columna usando la función mean. Existe un método conveniente llamado DataFrame.agg() que puede tomar un mapa de nombres de columna y función de agregación, de la siguiente manera:

aggfns = {
    'A': 'sum',
    'B': 'mean'
}
print(df.agg(aggfns))

Sin embargo, esto da como resultado una Serie en lugar de un DataFrame:

A    3.0
B    2.5
dtype: float64

Entre otros problemas, una serie tiene un solo dtype, por lo que pierde el tipo de dato por columna. Una serie es adecuada para representar una sola columna de un dataframe, pero no una sola fila del dataframe.

Logré encontrar esta complicada fórmula:

df['dummy'] = 0
dfa = df.groupby('dummy').agg(aggfns).reset_index(drop=True)
print(dfa)

Esto crea una columna ficticia que es 0 en todas partes, agrupa por ella, realiza la agregación y la elimina, lo que produce el resultado deseado:

   A    B
0  3  2.5

¿Seguramente hay algo mejor?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Un enfoque más simple y directo es usar corchetes dobles para devolver un DataFrame en lugar de una Serie, de esta manera:

    aggfns = {
        'A': ['sum'],
        'B': ['mean']
    }
    dfa = df.agg(aggfns)
    print(dfa)
    

    Esto produce la salida deseada:

         A    B
    sum  3  2.5
    

    El cambio consiste simplemente en actualizar el diccionario de funciones de agregación para usar listas en lugar de valores individuales. Cada valor en la lista representa una función de agregación separada que se aplica a esa columna, lo cual puede ser útil para escenarios de agregación más complejos. Por defecto, agg() devuelve un DataFrame cuando se aplican múltiples funciones de agregación a una columna.

Comments are closed.