2016-07-05 11 views
0

Ich möchte den Mittelwert des absoluten Wertes eines gruppierten Objekts berechnen.Mittelwert des absoluten Wertes von groupby Objekt Pandas

I.e.

grouped = df.groupby([pd.TimeGrouper(3MS)]) 

dct['x'] = grouped['profit'].agg('mean')/grouped['cost'].abs().agg('mean') 

Der obige Code führt jedoch zu einem Fehler. Ich habe verschiedene Varianten des obigen Codes ausprobiert, aber bisher führen alle zu Fehlern.

Es muss einen einfachen Weg dafür geben.

Update:

Dies ist der Datenrahmen, die vi pd.TimeGrouper (3MS) gruppiert ist. Ich möchte den absoluten Wert der Spaltenkosten 1 nehmen und dann den Mittelwert berechnen.

  cost1 cost2 cost3 cost4 
date                  
2016-03-31  -490.60  -118.10   -344.87   -91.44 
2016-04-30  -188.74   -55.99   -259.23   -75.16 
2016-05-31  -158.62   -43.58   -176.37   -21.98 

Ich versuchte grouped['cost1'].abs().mean() zu tun, aber ich habe:

/Users/User1/anaconda/lib/python2.7/site-packages/pandas/core/groupby.pyc in __getattr__(self, attr) 
    493    return self[attr] 
    494   if hasattr(self.obj, attr): 
--> 495    return self._make_wrapper(attr) 
    496 
    497   raise AttributeError("%r object has no attribute %r" % 

/Users/User1/anaconda/lib/python2.7/site-packages/pandas/core/groupby.pyc in _make_wrapper(self, name) 
    507     "using the 'apply' method".format(kind, name, 
    508              type(self).__name__)) 
--> 509    raise AttributeError(msg) 
    510 
    511   # need to setup the selection 

AttributeError: ("Cannot access callable attribute 'abs' of 'SeriesGroupBy' objects, try using the 'apply' method", u'occurred at index 0') 
+2

Können Sie einige Beispieldaten posten und was ist Ihr Fehler? Ansonsten raten wir, was hier falsch ist. – ako

+0

Ich habe die Informationen hinzugefügt, die Sie vorgeschlagen haben. Danke für das Angebot zu helfen. – codingknob

Antwort

0

Basierend auf Ihrem Update, ich denke, Sie suchen nach einem Mittelwert genommen auf absolute Werte für die Gruppe.

grouped.apply(abs).mean() verwendet, wird der abs Funktion auf Werte in der Gruppe (cost1 usw.) anwenden und die mean geben Sie den Durchschnitt für was auch immer Ihre Gruppierung variabel ist.

Sie können auch einfach die Funktion abs vor der Gruppierung anwenden und dann die mean Funktion direkt verwenden.

0

Du bist wahrscheinlich den Fehler bekommen, weil Sie nicht .agg auf einem Sereis Objekt verwenden können.

Sie haben Ihr gruppiertes Objekt nicht veröffentlicht, so dass ich nicht weiß, ob es andere Probleme gibt, aber Sie sollten es auf diese Weise versuchen. Ich denke, das sollte funktionieren:

dct['x'] = grouped['profit'].mean()/grouped['cost'].abs().mean() 
+0

Danke Joe für die Antwort. Ich habe meinem Beitrag gerade weitere Informationen hinzugefügt. – codingknob