Ich Aggregate meine Pandas Datenframe: data
. Insbesondere möchte ich den Durchschnitt und die Summe amount
s nach Tupeln von [origin
und type
] erhalten. Für Lungs und Summieren habe ich versucht, die numpy Funktionen unter:Pandas Aggregation Ignorieren NaN
import numpy as np
import pandas as pd
result = data.groupby(groupbyvars).agg({'amount': [ pd.Series.sum, pd.Series.mean]}).reset_index()
Mein Problem ist, dass die amount
Spalte enthält NaN
s, die die result
des obigen Codes verursacht eine Menge NaN
Durchschnitt und Summen haben.
Ich kenne beide pd.Series.sum
und pd.Series.mean
skipna=True
standardmäßig, also warum bin ich noch NaN
s hier zu bekommen?
Ich habe auch versucht dies, was natürlich nicht funktioniert:
data.groupby(groupbyvars).agg({'amount': [ pd.Series.sum(skipna=True), pd.Series.mean(skipna=True)]}).reset_index()
EDIT: Nach @ Korem Vorschlag, ich habe auch versucht, wie unten ein partial
zu verwenden:
s_na_mean = partial(pd.Series.mean, skipna = True)
data.groupby(groupbyvars).agg({'amount': [ np.nansum, s_na_mean ]}).reset_index()
aber Erhalten Sie diesen Fehler:
error: 'functools.partial' object has no attribute '__name__'
Könnten Sie einige Beispieldaten posten? Beginnen Sie mit "pd.Series.sum" anstatt mit "sum'" - der Code sollte einen schnelleren Pfad haben. – chrisb
Danke, ich habe mich entschieden, 'pd.Series.sum' zu benutzen, weil es eine 'skipna'-Option hatte. Bei der Antwort von @Korem benutze ich jetzt 'np.nansum'. Aber "np.nanmean" ist in meiner Version (1.7.1) von numpy nicht verfügbar. Ich werde versuchen, repräsentative Daten zu veröffentlichen, was eine Weile dauern kann. – Rhubarb