aggrego il mio dataframe Pandas: data
. Nello specifico, voglio ottenere la media e sommare amount
s di tuple di [origin
e type
]. Per la media e sommando ho provato le funzioni NumPy di seguito:Aggregazione di panda ignorando NaN
import numpy as np
import pandas as pd
result = data.groupby(groupbyvars).agg({'amount': [ pd.Series.sum, pd.Series.mean]}).reset_index()
Il mio problema è che la colonna amount
comprende NaN
s, che causa la result
del codice qui sopra per avere un sacco di NaN
media e somme.
So sia pd.Series.sum
e pd.Series.mean
hanno skipna=True
di default, quindi perché sto ancora ricevendo NaN
s qui?
Ho provato anche questo, che ovviamente non ha funzionato:
data.groupby(groupbyvars).agg({'amount': [ pd.Series.sum(skipna=True), pd.Series.mean(skipna=True)]}).reset_index()
EDIT: Su @ di Korem suggerimento, ho anche cercato di utilizzare un partial
come di seguito:
s_na_mean = partial(pd.Series.mean, skipna = True)
data.groupby(groupbyvars).agg({'amount': [ np.nansum, s_na_mean ]}).reset_index()
ma ottenere questo errore:
error: 'functools.partial' object has no attribute '__name__'
Potrebbe inserire alcuni dati di esempio? Inoltre, per iniziare, piuttosto che per 'pd.Series.sum' - basta usare' 'sum'' - il codice dovrebbe prendere un percorso più veloce. – chrisb
Grazie, ho deciso di usare 'pd.Series.sum' perché aveva l'opzione' skipna'. Leggendo la risposta di Korem, ora uso 'np.nansum'. Ma 'np.nanmean' non è disponibile nella mia versione (1.7.1) di numpy. Proverò a postare dati rappresentativi, il che potrebbe richiedere del tempo. – Rhubarb