Vuelva a colocar la columna en pandas trama de datos con la media de esa columna

Decano de energía:

Tengo una trama de datos:

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

   A  B
0  1  2
1  1  3
2  4  6

Quiero devolver una trama de datos del mismo tamaño que contiene la media de cada columna:

   A      B
0  2  3.666
1  2  3.666
2  2  3.666

¿Hay una manera sencilla de hacer esto?

ALollz:

Recrear la trama de datos. Enviar la serie de media a un diccionario, entonces el índice define el número de filas.

pd.DataFrame(df.mean().to_dict(), index=df.index)

#     A         B
#0  2.0  3.666667
#1  2.0  3.666667
#2  2.0  3.666667

El mismo concepto, pero la creación de la gama primero guarda una buena cantidad de tiempo.

pd.DataFrame(np.broadcast_to(df.mean(), df.shape), 
             index=df.index, 
             columns=df.columns)

Aquí están algunos de cadencias. Por supuesto, esto dependerá un poco del número de columnas, pero se puede ver que hay bastante grandes diferencias cuando se suministre toda la matriz, para empezar

import perfplot
import pandas as pd
import numpy as np

perfplot.show(
    setup=lambda N: pd.DataFrame(np.random.randint(1,100, (N, 5)),
                                 columns=[str(x) for x in range(5)]), 
    kernels=[
        lambda df: pd.DataFrame(np.broadcast_to(df.mean(), df.shape), index=df.index, columns=df.columns),
        lambda df: df.assign(**df.mean()),
        lambda df: pd.DataFrame(df.mean().to_dict(), index=df.index)
    ],
    labels=['numpy broadcast', 'assign', 'dict'],
    n_range=[2 ** k for k in range(1, 22)],
    equality_check=np.allclose,
    xlabel="Len(df)"
)

introducir descripción de la imagen aquí

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=365321&siteId=1
Recomendado
Clasificación