我覺得你可以先刪除列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