我有以下内容:
tableViewController
我想转置列ID,然后使用以下内容:
Index ID speed _avg_val
245 1 10 30.5
246 1 2 25.1
我尝试使用此方法Transposing one column in python pandas with the simplest index possible但无法使用此方法来处理多个列。
答案 0 :(得分:2)
我认为您可以先删除列Index
,然后将列ID
添加到index
,unstack
,并按列sort_index
对列中的第二级MultiIndex进行排序:
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