2016-01-13 10 views
5

sagen, dass ich eine Pandas Datenrahmen haben, wie:Concatenate Reihen von Pandas Datenrahmen mit der gleichen ID

A B id 
0 1 1 0 
1 2 1 0 
2 3 2 1 
3 0 2 1 

Say I Reihen mit der gleichen ID kombinieren möchten, so dass die anderen Elemente in den Reihen zusammen in ein gestellt bekommen Liste, so dass der obige Datenrahmen würde:

 A  B  id 
0 [1, 2] [1, 1] 0 
1 [3, 0] [2, 2] 1 

als die ersten beiden Reihen, und die letzten beiden Zeilen haben die gleiche ID. Haben Pandas eine Funktion, dies zu tun? Ich kenne den Befehl pandas groupby, aber ich möchte, dass der Rückgabetyp ebenfalls ein Datenframe ist. Vielen Dank.

+0

Ich bin mir des Befehls groupby Pandas, aber ich würde den Rückgabetyp wie ein Datenrahmen als auch zu sein. Vielen Dank. – Alex

Antwort

7

Sie groupby für das mit groupby agg Verfahren und tolist Methode der Pandas Series verwenden:

In [762]: df.groupby('id').agg(lambda x: x.tolist()) 
Out[762]: 
     A  B 
id     
0 [1, 2] [1, 1] 
1 [3, 0] [2, 2] 

groupby Rückkehr ein Datenrahmen, wie Sie wollen:

In [763]: df1 = df.groupby('id').agg(lambda x: x.tolist()) 

In [764]: type(df1) 
Out[764]: pandas.core.frame.DataFrame 

genau Um Ihre erwartete Spiel Ergebnis Sie zusätzlich reset_index tun könnte, oder verwenden Sie as_index=False in groupby:

In [768]: df.groupby('id', as_index=False).agg(lambda x: x.tolist()) 
Out[768]: 
    id  A  B 
0 0 [1, 2] [1, 1] 
1 1 [3, 0] [2, 2] 

In [771]: df1.reset_index() 
Out[771]: 
    id  A  B 
0 0 [1, 2] [1, 1] 
1 1 [3, 0] [2, 2] 
+0

Vielen Dank! – Alex

Verwandte Themen