2016-11-23 5 views
1

Ich mag würde die folgenden Pandas konvertieren DataframePandas Datenrahmen reshape/Dreh

a b 
0 1 2 
1 1 5 
2 2 4 
3 1 3 
4 3 7 
5 2 1 

zu

0 1 2 
a   
1 2 5 3 
2 4 1 NaN 
3 7 NaN NaN 

Kennen Sie eine einfache Möglichkeit?

+0

Es tut mir leid, aber ich kann nicht sehen, das Muster hier. Wie genau beziehen sich die Elemente der resultierenden Matrix auf das Original? –

+0

Angenommen, die Spalte "b" zeigt die Blutdruckwerte und die Spalte "a" die Patienten-ID. Ich möchte alle Messwerte von jedem Patienten in einer Zeile haben. Jeder Patient kann von 1 bis zu einer maximalen Anzahl von Ablesungen haben, sagen wir 10. Die endgültige Tabelle hat also die Form number_of_patients x 10. – user2725109

Antwort

1

Ich würde dies wie folgt tun:

In [11]: df.groupby("a")["b"].apply(lambda x: pd.Series(x.values)) 
Out[11]: 
a 
1 0 2 
    1 5 
    2 3 
2 0 4 
    1 1 
3 0 7 
Name: b, dtype: int64 

das Formular erhalten Sie wollten Sie dann unstack (wenn auch wahrscheinlich oben besser):

In [22]: df.groupby('a')["b"].apply(lambda x: pd.Series(x.values)).unstack(1) 
Out[22]: 
    0 1 2 
a 
1 2.0 5.0 3.0 
2 4.0 1.0 NaN 
3 7.0 NaN NaN 
+0

Tolle Lösung. Vielen Dank. – user2725109