2017-06-19 1 views
0

ich Daten, die Wie Ereignisse in Metadaten von der ursprünglichen Datenrahmen aufzurollen

Name,Report_ID,Amount,Flag,Actions 
Fizz,123,5,,A 
Fizz,123,10,Y,A 
Buzz,456,10,,B 
Buzz,456,40,,C 
Buzz,456,70,,D 
Bazz,678,100,Y,F 

Aus diesen einzelnen Operationen wie

sieht, würde Ich mag einen neuen Datenrahmen erstellen, die verschiedene Statistiken/meta name einfängt. Meist Summierungen und Zählungen von Einträgen/Zählungen von eindeutigen Einträgen. Ich würde die Ausgabe der Datenrahmen wie wie folgt aussehen:

Report_ID,Number of Flags,Number of Entries, Total,Unique Actions 
123,1,2,15,1 
456,0,3,120,3 
678,1,1,100,1 

Ich habe versucht, groupby, aber ich kann nicht alle einzelnen groupby verschmelzen Objekte wieder zusammen richtig. Bisher habe ich versucht

totals = raw_data.groupby('Report_ID')['Amount'].sum() 
event_count = raw_data.groupby('Report_ID').size() 
num_actions = raw_data.groupby('Report_ID').Actions.nunique() 

output = pd.concat([totals,event_count,num_actions]) 

Wenn ich dies versuche, bekomme ich TypeError: cannot concatenate a non-NDFrame object. Jede Hilfe wäre willkommen!

Antwort

1

Sie agg auf dem groupby

f = dict(Flag=['count', 'size'], Amount='sum', Actions='nunique') 
df.groupby('Report_ID').agg(f) 

      Flag  Amount Actions 
      count size sum nunique 
Report_ID       
123   1 2  15  1 
456   0 3 120  3 
678   1 1 100  1 
0

verwenden können, Sie müssen nur axis=1 angeben, wenn verketten:

event_count.name = 'Event Count' # Name the Series, as you did not group on one. 
>>> pd.concat([totals, event_count, num_actions], axis=1) 

      Amount Event Count Actions 
Report_ID        
123   15   2  1 
456   120   3  3 
678   100   1  1 
Verwandte Themen