Łączę moją ramkę danych Pandy: data
. W szczególności chcę uzyskać średnią i sumę amount
s przez krotki z [origin
i type
]. Dla uśredniania i zsumowanie Próbowałem funkcji NumPy poniżej:Agregacja pand ignorując NaN's
import numpy as np
import pandas as pd
result = data.groupby(groupbyvars).agg({'amount': [ pd.Series.sum, pd.Series.mean]}).reset_index()
Mój problem jest, że kolumna amount
obejmuje NaN
s, co powoduje result
powyższego kodu, aby mieć dużo NaN
średnie i sum.
Domyślnie wiem, że pd.Series.sum
i pd.Series.mean
mają domyślnie skipna=True
, więc dlaczego wciąż mam tutaj NaN
?
Próbowałem też to, co oczywiście nie działa:
data.groupby(groupbyvars).agg({'amount': [ pd.Series.sum(skipna=True), pd.Series.mean(skipna=True)]}).reset_index()
EDIT: Po użytkownika @ Korem sugestią, próbowałem też użyć partial
jak poniżej:
s_na_mean = partial(pd.Series.mean, skipna = True)
data.groupby(groupbyvars).agg({'amount': [ np.nansum, s_na_mean ]}).reset_index()
ale ten błąd:
error: 'functools.partial' object has no attribute '__name__'
mógłbyś pisać przykładowe dane? Na początek, zamiast 'pd.Series.sum' - po prostu użyj' 'sum'' - kod powinien zająć szybszą ścieżkę. – chrisb
Dziękuję, postanowiłem użyć 'pd.Series.sum' jus, ponieważ miał opcję' skipna'. Czytając odpowiedź @ Korem, teraz używam 'np.nansum'. Ale 'np.nanmean' nie jest dostępny w mojej wersji (1.7.1) z numpy. Postaram się opublikować reprezentatywne dane, co może trochę potrwać. – Rhubarb