Pandas aggregation ignoriert Nans
Ich aggregierten meine Pandas dataframe: data
. Speziell, ich will den Durchschnitt und die Summe amount
s durch Tupel von [origin
und type
]. Für die Mittelung und Summierung versuchte ich die numpy-Funktionen im folgenden:
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 bewirkt, dass die result
dem oben aufgeführten code, um eine Menge von NaN
Durchschnitt und Summen.
Ich kenne beide pd.Series.sum
und pd.Series.mean
haben skipna=True
standardmäßig, also warum bin ich noch immer NaN
s hier?
Habe ich auch dies ausprobiert, was natürlich nicht funktioniert:
data.groupby(groupbyvars).agg({'amount': [ pd.Series.sum(skipna=True), pd.Series.mean(skipna=True)]}).reset_index()
EDIT:
Auf @Korem ' s Vorschlag habe ich auch versucht, eine partial
wie folgt:
s_na_mean = partial(pd.Series.mean, skipna = True)
data.groupby(groupbyvars).agg({'amount': [ np.nansum, s_na_mean ]}).reset_index()
aber diese Fehlermeldung erhalten:
error: 'functools.partial' object has no attribute '__name__'
- Konnte Sie nach ein paar Beispiel-Daten? Auch, um mit zu beginnen, anstatt
pd.Series.sum
- nutzen Sie einfach'sum'
- der code ist, sollte ein schneller Weg. - Danke, ich habe mich für
pd.Series.sum
jus denn er hatte eineskipna
option. Lesen @Korem die Antwort, ich verwende jetztnp.nansum
. Abernp.nanmean
ist nicht erhältlich in meiner version (1.7.1) von numpy.Ich werde versuchen, nach repräsentativen Daten, die eine Weile dauern kann.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden numpy ist nansum und nanmean:
Als workaround für ältere version von numpy, und auch eine Möglichkeit zum befestigen Ihres letzten versuchen:
Wenn Sie
pd.Series.sum(skipna=True)
Sie tatsächlich rufen Sie die Methode. Wenn Sie es verwenden möchten, wie diese, die Sie definieren möchten eine teilweise. Also, wenn Sie nicht habennanmean
definieren wirs_na_mean
und verwenden:nanmean
wirft den Fehler:'module' object has no attribute 'nanmean'
. (Ich habe gerade überprüft,nanmean
ist neu in Version 1.8.0np.nansum
scheint zu werden Hinzugefügt in version 1.8.0 als gut. Es ist neugierig, dass ich nicht bekommen, die gleichen Fehler für das...skipna=True
fürpd.Series.mean
standardmäßig sowieso?data.groupby(groupbyvars).agg({'amount': [ np.nansum, lambda x: pd.Series.mean(x,skipna=True)]}).reset_index()
aber immer nochNaN
s. Ich werde das weiter untersuchen. Vielleicht sind das die Fälle, für die alle die ich habe, ist NaN..Könnte es zu spät sein, aber trotzdem könnte es nützlich sein für andere.
Versuchen anzuwenden-Funktion: