2016-07-21 17 views
-2

Ich habe einen Datenrahmen, die von zwei Spalten gruppiert - Datum und Klient und ich den Betrag summieren so: new_df = df.groupby(['Date',Client'])Berechnung auf Gruppen nach Gruppe mit Pandas

Jetzt erhalte ich die folgende df:

   Sum 
Date Client 
1/1 A  0.8 
     B  0.2 
1/2 A  0.1 
     B  0.9 

Ich möchte in der Lage sein, die Tatsache zu erfassen, dass es eine hohe Fluktuation zwischen dem Verhältnis von 0,8 zu 0,2 gibt, das zu 0,1 zu 0,9 geändert hat. Was wäre der effizienteste Weg, dies zu tun? Auch kann ich nicht auf die Felder Datum und Client zugreifen, wenn ich versuche,

new_df[['Date','Client']] 

Warum ist das?

Antwort

1

IIUC Sie pct_change oder diff verwenden können:

new_df = df.groupby(['Date','Client'], as_index=False).sum() 
print (new_df) 
    Date Client Sum 
0 1/1  A 0.8 
1 1/1  B 0.2 
2 1/2  A 0.1 
3 1/2  B 0.9 

new_df['pct_change'] = new_df.groupby('Date')['Sum'].pct_change() 
new_df['diff'] = new_df.groupby('Date')['Sum'].diff() 
print (new_df) 
    Date Client Sum pct_change diff 
0 1/1  A 0.8   NaN NaN 
1 1/1  B 0.2  -0.75 -0.6 
2 1/2  A 0.1   NaN NaN 
3 1/2  B 0.9  8.00 0.8 
+0

Dank, das ist th Richtung, aber ich möchte den Unterschied in A wissen, nur gegen die differnece in B nur ...? – Umen

+0

Wenn ich richtig verstanden habe, ändere die Spalte für groupby von "Date" auf "Client" - "new_df ['pct_change'] = new_df.groupby ('Client') ['Sum']. Pct_change()' – jezrael

Verwandte Themen