2016-07-29 13 views
1

Angenommen, ich habe folgende Daten als Pandas Datenrahmen:Verschwenkung Daten in Pandas

   type  exdiv paydate amount 
declared           
2014-01-31 final 2014-03-03 2014-03-10 3.10 
2014-06-27 interim 2014-08-11 2014-08-18 1.55 
2015-01-30 final 2015-03-02 2015-03-09 2.33 
2015-01-30 final 2015-03-02 2015-03-09 0.77 
2015-06-26 interim 2015-08-07 2015-08-17 1.80 
2016-01-29 final 2016-02-29 2016-03-07 3.45 

Der 2015.01.30 Eintrag wird zweimal wiederholt. Was ist der einfachste Weg, diese Zeile zu summieren, so dass ich nur einen Eintrag auf 3,10 für 2015.01.30 gleich haben?

ich folgendes bisher versucht habe:

x=pd.pivot_table(df, values='amount', index=['exdiv','paydate','type'], columns=[]) 

Aber das schafft eine Multi-Index und ich kann nicht den aktuellen Indexspalte verwenden (‚erklärt‘).

Ich weiß, ich kann den Index als normale Spalte hinzufügen, den Befehl ausführen und versuchen, den Multi-Index zurück in einen einzigen Index zu konvertieren, aber ich bin sicher, dass es eine bessere Methode in Pandas geben muss?

Antwort

2

Verwendung transform mit drop_duplicates:

df['amount'] = df.groupby(level=0)['amount'].transform(sum) 
df = df.reset_index().drop_duplicates(subset=['declared','type','exdiv','paydate']) 
print (df) 
    declared  type  exdiv  paydate amount 
0 2014-01-31 final 2014-03-03 2014-03-10 3.10 
1 2014-06-27 interim 2014-08-11 2014-08-18 1.55 
2 2015-01-30 final 2015-03-02 2015-03-09 3.10 
4 2015-06-26 interim 2015-08-07 2015-08-17 1.80 
5 2016-01-29 final 2016-02-29 2016-03-07 3.45 

Oder fügen reset_index und aggfunc=sum-pivot_table:

x=pd.pivot_table(df.reset_index(), 
       values='amount', 
       index=['declared','exdiv','paydate','type'], 
       aggfunc=sum).reset_index() 
print (x) 
    declared  exdiv  paydate  type amount 
0 2014-01-31 2014-03-03 2014-03-10 final 3.10 
1 2014-06-27 2014-08-11 2014-08-18 interim 1.55 
2 2015-01-30 2015-03-02 2015-03-09 final 3.10 
3 2015-06-26 2015-08-07 2015-08-17 interim 1.80 
4 2016-01-29 2016-02-29 2016-03-07 final 3.45 
+0

Ausgezeichnet, danke. Ich entschied mich für die Transformation mit Drop-Duplikaten. – Johan

+0

Glad kann Ihnen helfen! – jezrael