我觉得你可以先删除列Index
,然后加列ID
到index
,unstack
和列由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
目前还不清楚你在问什么。如果你有更多的行会发生什么? – IanS
带'245'和'246'值的'索引'是不必要的? – jezrael
我想分组重复的ID,然后将其变量转换为单行。所以如果你有更多的行,它只需要在右边添加更多的列。 目前我有1000多列,所以在这种情况下,我的df.shape如下:(1118,18)。一旦转换,它应该有一个df.shape(〜700,〜200)。 – germanfox