2017-01-12 3 views
2

Ich habe diesen Datenrahmen und ich mag Zeilen mit der gleichen ID in eine einzige Zeile transponieren:Ausgabe mit Zeilen in eine einzige Reihe Umwandlung

ID TYPE1 TYPE2 GROUP STARTIME 
1 A  C  Q1 10:25 
1 A  C  Q2 11:00 
1 A  C  Q3 11:30 
2 B  D  Y1 12:00 
2 B  D  Y2 12:30 

Das Ergebnis sollte sein:

ID TYPE1 TYPE2 G1 G2 G3 START_G1 START_G2 START_G3 
1 A  C  Q1 Q2 Q3 10:25  11:00  11:30 
2 B  D  Y1 Y2 NaN 12:00  12:30  NaN 

Diese mein aktueller Code:

df_transposed = df.pivot_table(index= ['ID','GROUP']).unstack() 
df_transposed = df_transposed.sort_index(axis=1, level=1) 
df_transposed.columns = ['_'.join((col[0], str(col[1]))) for col in df_transposed] 
df_transposed = df_transposed.reset_index(level=0) 
df_transposed.head() 

Aber Spalten TYPE1 und TYPE2 sind 3 ti wiederholt mes für ID 1 und 2 mal für ID 2. Ich möchte, dass sie eine einzelne Spalte sind, wie im erwarteten Ergebnis gezeigt, weil sie immer den gleichen Wert für die gleiche ID haben. Auch ich Spalten wie GROUP_Q1, aber ich möchte Group_1, bekommen Group_2 usw.

Antwort

1

Sie pivot_table mit cumcount zum Zählen von Gruppen verwenden können:

df_transposed = df.pivot_table(index= ['ID','TYPE1', 'TYPE2'], 
           columns=df.groupby(['ID','TYPE1', 'TYPE2']).cumcount() + 1, 
           values=['GROUP','STARTIME'], aggfunc='first') 
df_transposed.columns = ['_'.join((col[0], str(col[1]))) for col in df_transposed] 
print (df_transposed) 
       GROUP_1 GROUP_2 GROUP_3 STARTIME_1 STARTIME_2 STARTIME_3 
ID TYPE1 TYPE2               
1 A  C   Q1  Q2  Q3  10:25  11:00  11:30 
2 B  D   Y1  Y2 None  12:00  12:30  None 

Wenn umbenennen müssen Spalten:

df = df.rename(columns={'GROUP':'G','STARTIME':'START'}) 
df_transposed = df.pivot_table(index= ['ID','TYPE1', 'TYPE2'], 
           columns=df.groupby(['ID','TYPE1', 'TYPE2']).cumcount() + 1, 
           values=['G','START'], aggfunc='first') 
df_transposed.columns = ['_'.join((col[0], str(col[1]))) for col in df_transposed] 
print (df_transposed.reset_index()) 
    ID TYPE1 TYPE2 G_1 G_2 G_3 START_1 START_2 START_3 
0 1  A  C Q1 Q2 Q3 10:25 11:00 11:30 
1 2  B  D Y1 Y2 None 12:00 12:30 None 
Verwandte Themen