Skip to content Skip to sidebar Skip to footer

Transposing One Column In Python Dataframe

I have the following: Index ID speed _avg_val 245 1 10 30.5 246 1 2 25.1 I want to transpose the column ID and then have the following: ID (Index)

Solution 1:

I think you can first remove column Index, then add column ID to index, unstack and sort second level of MultiIndex in columns by sort_index:

print (df)
   Index  ID  speed  _avg_val
0    245   1     10      30.5
1    246   1      2      25.1


df = df.drop('Index', axis=1)
       .set_index('ID', append=True)
       .unstack(0)
       .sort_index(axis=1, level=1)

#remove MultiIndex from columns
df.columns = ['_'.join((col[0], str(col[1]))) for col in df.columns]

print (df)
    speed_0  _avg_val_0  speed_1  _avg_val_1
ID                                          
1        10        30.5        2        25.1

If there is more values in ID column, need use cumcount:

print (df)
   Index  ID  speed  _avg_val
0    245   1     10      30.5
1    246   1      2      25.1
2    245   2      5      37.5
3    246   2     28      28.1
4    246   2     27      23.0

df = df.drop('Index', axis=1)
df['g'] = df.groupby('ID').cumcount()
df = df.set_index(['ID', 'g']).unstack(fill_value=0).sort_index(axis=1, level=1)
df.columns = ['_'.join((col[0], str(col[1]))) for col in df.columns]

print (df)
    speed_0  _avg_val_0  speed_1  _avg_val_1  speed_2  _avg_val_2
ID                                                               
1        10        30.5        2        25.1        0         0.0
2         5        37.5       28        28.1       27        23.0

Post a Comment for "Transposing One Column In Python Dataframe"