2016-06-15 4 views
1

Ich habe einen einzelnen Datenrahmen, der nach der Bereinigung und Zusammenführung in einem Zustand endete, in dem ich mehrere Zeilen mit demselben Indexwert habe.Duplizierte Indices in einem Datenrahmen zusammenführen

Ich muss diese doppelten Zeilen zusammenführen und ein Datenframe herausholen, das eine einzelne Zeile für jeden Durchlauf von Duplikaten hat.

Das fühlt sich an, als sollte es eine Standardoperation sein, wenn man mit Datenframes arbeitet, aber ich kann nicht herausfinden, wie man Pandas dazu bringt.

Die beste Antwort, die ich gefunden habe, ist hier: Merge two rows in the same Dataframe if their index is the same?

jedoch die Lösung gesetzt endet dort mich mit einem „groupby“ Objekt eher als ein Datenrahmen. Da ich dann noch eine weitere Gruppe am Rahmen machen will, habe ich keine Ahnung wie es weitergeht.

Gibt es eine Standardfunktion in Methode in Pandas zum Komprimieren eines Datenrahmens, wo mehrere Zeilen den gleichen Index teilen, der einen neuen Datenrahmen zurückgibt?

ex:

  visits revenue product-type 
product1  200  50 stockings 
product1  50  100   #n/a 
product2  150  20   toy 
    ...  ..  ..   .. 

zu

  visits revenue product-type 
product1  250  150 stockings 
product2  150  20   toy 
    ...  ..  ..   .. 

Antwort

2

können Sie groupby von index und dann aggregate:

print (df.groupby(level=0).agg({'visits':sum,'revenue':sum,'product-type':'first'})) 

      visits revenue product-type 
product1  250  150 stockings 
product2  150  20   toy 

Vielleicht besser für letzte Spalte ist join - Ihre Daten sind nicht verloren, (first nur ersten Wert, andere Daten nimmt werden entfernt):

print (df.groupby(level=0).agg({'visits':sum, 
           'revenue':sum, 
           'product-type': lambda x: ''.join(x.fillna(''))})) 

      visits revenue product-type 
product1  250  150 stockings 
product2  150  20   toy 

Wenn die Verwendung nur sum, letzte Spalte entfernt wird - automatic exclusion of nuisance columns:

print (df.groupby(level=0).sum()) 
      visits revenue 
product1  250  150 
product2  150  20 
Verwandte Themen