¿Hay alguna manera de escribir una función de agregación como se usa en el método DataFrame.agg
, que tendría acceso a más de una columna de los datos que se agregan? Los casos de uso típicos serían los funcionamientos de desviación estándar ponderados y promedio ponderado.Función agregada de Pandas DataFrame utilizando varias columnas
Me gustaría ser capaz de escribir algo como
def wAvg(c, w):
return ((c * w).sum()/w.sum())
df = DataFrame(....) # df has columns c and w, i want weighted average
# of c using w as weight.
df.aggregate ({"c": wAvg}) # and somehow tell it to use w column as weights ...
Puede ser más eficiente dividir esto en unas pocas operaciones de la siguiente manera: (1) crear una columna de ponderaciones, (2) normalizar las observaciones por sus ponderaciones, (3) calcular la suma agrupada de observaciones ponderadas y una agrupada suma de ponderaciones, (4) normaliza la suma ponderada de observaciones por la suma de ponderaciones. – kalu
¿Qué sucede si queremos calcular los wavg de muchas variables (columnas), p. todo excepto df ['pesos']? – CPBL
@Wes, ¿hay alguna manera en que una vez pueda hacer esto con 'agg()' y una 'lambda' construida alrededor de' np.average (... weights = ...) ', o cualquier soporte nativo nuevo en pandas para ponderar significa que esta publicación apareció por primera vez? –