2017-05-02 3 views
-3

Ich habe versucht, Zeilen mit Anwendungsfunktion im Dataframe zu kombinieren, konnte aber nicht. Ich möchte Zeilen zu einer Liste kombinieren, wenn Spalte (c1 + c2) Informationen gleich ist.Python: Wie Zeilen im Datenrahmen kombinieren können

zum Beispiel

Dataframe df1 
     c1 c2 c3 
    0 0 x {'a':1 ,'b':2} 
    1 0 x {'a':3 ,'b':4} 
    2 0 y {'a':5 ,'b':6} 
    3 0 y {'a':7 ,'b':8} 
    4 2 x {'a':9 ,'b':10} 
    5 2 x {'a':11 ,'b':12} 

erwartete Ergebnis

Dataframe df1 
     c1 c2 c3 
    0 0 x [{'a':1 ,'b':2},{'a':3 ,'b':4}] 
    1 0 y [{'a':5 ,'b':6},{'a':7 ,'b':8}] 
    2 2 z [{'a':9 ,'b':10},{'a':11,'b':12}] 
+0

Haben Sie dies überprüft http://StackOverflow.com/questions/39954668/how-to -convert-column-mit-list-of-values-in-rows-in-pandas-Datenframe? – plasmon360

+0

sollten Sie Pandas oder R oder was auch immer Sie verwenden, – greggo

Antwort

1

Quelle Pandas DF:

In [20]: df 
Out[20]: 
    c1 c2     c3 
0 0 x {'a': 1, 'b': 2} 
1 0 x {'a': 3, 'b': 4} 
2 0 y {'a': 5, 'b': 6} 
3 0 y {'a': 7, 'b': 8} 
4 2 x {'a': 9, 'b': 10} 
5 2 x {'a': 11, 'b': 12} 

Lösung:

In [21]: df.groupby(['c1','c2'])['c3'].apply(list).to_frame('c3').reset_index() 
Out[21]: 
    c1 c2          c3 
0 0 x  [{'a': 1, 'b': 2}, {'a': 3, 'b': 4}] 
1 0 y  [{'a': 5, 'b': 6}, {'a': 7, 'b': 8}] 
2 2 x [{'a': 9, 'b': 10}, {'a': 11, 'b': 12}] 

HINWEIS: Ich würde Ihnen empfehlen, die Verwendung nicht skalarer Werte in Pandas DFs-Zellen zu vermeiden - dies könnte zu verschiedenen Schwierigkeiten und Leistungsproblemen führen

+0

to_frame angeben (und markieren), was ich gesucht habe. Danke! – hyon

+0

@hyon, Sie sind willkommen. Bitte denken Sie an [acceptant] (http://meta.stackexchange.com/a/5235) eine Antwort, wenn Sie glauben, dass sie Ihre Frage beantwortet hat – MaxU

Verwandte Themen