2016-12-08 5 views
1

Ich habe eine DatenrahmenPandas Durchschnitt der Differenz zwischen zwei aufeinander folgenden Zeilen in Datenrahmen

name date   quantity 
'A' 2016-12-02 20 
'A' 2016-12-04 5 
'A' 2016-11-30 10 
'B' 2016-11-30 10 
... 

Was will ich tun berechnen, für jedes Paar von aufeinanderfolgenden Daten (in Folge als chronologisch) für ein Name, der Unterschied in der Menge und der Durchschnitt zählen diese für einen Namen.

Daten werden in der Tat nicht unbedingt in chronologischer Reihenfolge dargestellt.

Speziell für Name A würde ich +10 (Differenz 2. Dezember - 30. November) und -15 (Differenz 4. Dezember - 2. November) berechnen und dann diese berechnen, um ein Endergebnis von -2.5 für zu erhalten dieser Name.

Ideen?

Antwort

2

können Sie verwenden groupby und applydiff mit mean:

print (df.groupby('name')['quantity'].apply(lambda x: x.diff().mean()).reset_index()) 
    name quantity 
0 'A'  -2.5 
1 'B'  NaN 

EDIT: Sie können sort_values von date Spalte hinzufügen

print (df.sort_values('date') 
     .groupby('name')['quantity'] 
     .apply(lambda x: x.diff().mean()) 
     .reset_index()) 
    name quantity 
0 'A'  -2.5 
1 'B'  NaN 
+0

Toll, aber traurig, dass ich nicht angab werden die Termine unbedingt bestellt. Müsste ich nach der Gruppe und vor dem Antrag sortieren, um sicher zu bleiben? –

+0

Haben Sie Angst vor Änderungsbestellungen? Ich denke, es gibt kein Problem. Oder brauchen Sie zuerst den Datenrahmen nach Spalte "Datum"? – jezrael

+0

Vielleicht ist das Beste, Beispieldaten mit der gewünschten Ausgabe hinzuzufügen. – jezrael

Verwandte Themen