C'è un modo per scrivere una funzione di aggregazione come viene utilizzata nel metodo DataFrame.agg
, che avrebbe accesso a più di una colonna dei dati che vengono aggregati? I casi d'uso tipici sarebbero la media ponderata, le funzioni di deviazione standard ponderate.Pandas DataFrame funzione di aggregazione utilizzando più colonne
mi piacerebbe essere in grado di scrivere qualcosa di simile
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 ...
Potrebbe essere più efficiente suddividerlo in poche operazioni come segue: (1) creare una colonna di pesi, (2) normalizzare le osservazioni con i loro pesi, (3) calcolare la somma raggruppata di osservazioni ponderate e raggruppate somma dei pesi, (4) normalizza la somma ponderata delle osservazioni per la somma dei pesi. – kalu
E se vogliamo calcolare le variabili di molte variabili (colonne), ad es. tutto tranne che per df ['pesi']? – CPBL
@Wes, c'è un modo per farlo una volta con 'agg()' e un 'lambda' costruito attorno a' np.average (... weights = ...) ', o qualsiasi nuovo supporto nativo in panda per ponderato significa da quando questo post è apparso per la prima volta? –