转置 python 数据框中的一列

Transposing one column in python dataframe

我有以下内容:

Index  ID     speed  _avg_val
245    1      10      30.5
246    1      2       25.1

我想转置列 ID,然后具有以下内容:

ID (Index)    speed   _avg_val   speed_y   _avg_val_y
1             10      30.5       2         25.1

我尝试使用此方法 但无法将其用于多列。

我认为您可以先删除列 Index,然后将列 ID 添加到 indexunstack 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

如果ID列中的值较多,需要使用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