Transposing one column in python dataframe

给你一囗甜甜゛ 提交于 2019-12-13 08:05:00

问题


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)    speed   _avg_val   speed_y   _avg_val_y
1             10      30.5       2         25.1

I tried to use this method Transposing one column in python pandas with the simplest index possible but could not get this to work with multiple columns.


回答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


来源:https://stackoverflow.com/questions/40529671/transposing-one-column-in-python-dataframe

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!