2017-05-18 4 views
2

enter image description hereWie würde ich diese grundlegende Tabelle mit Pandas drehen?

Was ich will, ist dies:

visit_id atc_1 atc_2 atc_3  atc_4  atc_5 atc_6 atc_7 
48944282 A02AG J01CA04 J095AX02 N02BE01 R05X NaN NaN 
48944305 A02AG A03AX13 N02BE01  R05X NaN NaN NaN 

Ich weiß nicht, wie viele atc_1 ... atc_7 ... atc_100 Spalten wird es im voraus sein müssen?. Ich muss nur alle zugehörigen atc_codes in einer Zeile mit jedem visit_id sammeln.

Das scheint wie ein group_by und dann ein pivot aber ich habe es viele Male versucht und ist fehlgeschlagen. Ich habe auch versucht, ein la SQL mit Pandas merge() selbst zu verbinden, aber das funktioniert auch nicht.

Das Endergebnis ist, dass ich atc_1, atc_7, ... atc_100 zu einem langen atc_code zusammenfügen werde. Dieser Verbund atc_code wird meine Spalte "Y" oder "Labels" meines Datasets sein, die ich vorherzusagen versuche.

Vielen Dank!

Antwort

2

Verwenden Sie zuerst cumcount für Zählwerte pro Gruppe, die Spalten nach Funktion pivot erstellen. Fügen Sie dann fehlende Spalten mit reindex_axis hinzu und ändern Sie die Spaltennamen durch add_prefix. Letzte reset_index:

g = df.groupby('visit_id').cumcount() + 1 
print (g) 
0 1 
1 2 
2 3 
3 4 
4 5 
5 1 
6 2 
7 3 
8 4 
dtype: int64 

df = pd.pivot(index=df['visit_id'], columns=g, values=df['atc_code']) 
     .reindex_axis(range(1, 8), 1) 
     .add_prefix('atc_') 
     .reset_index() 

print (df) 
    visit_id atc_1 atc_2  atc_3 atc_4 atc_5 atc_6 atc_7 
0 48944282 A02AG J01CA04 J095AX02 N02BE01 R05X NaN NaN 
1 48944305 A02AG A03AX13 N02BE01  R05X None NaN NaN 
+0

ist es sicher zu sagen, dass, ob in 4 Minuten oder 40 Jahren, ich nie in der Lage gewesen wäre, damit zu kommen. Danke, auch wenn ich es (noch) nicht ganz verstehe – user798719

+0

Gib mir eine Sekunde, ich füge eine Erklärung hinzu. – jezrael

Verwandte Themen