Вы можете использовать set_index
для перемещения type
и id
столбцов в индекс, а затем unstack
переместить уровень type
индекса в индекс столбца. Вам не нужно беспокоиться о значениях v
- где индексы идут диктовать расположение значений.
В результате DataFrame с a MultiIndex для индекса столбца:
In [181]: df.set_index(['type', 'id']).unstack(['type'])
Out[181]:
v1 v2
type A B A B
id
1 6 4 9 2
2 3 3 7 6
Как правило, мультииндексных предпочтительнее уплощенной индекс столбца. Это дает вам лучшие способы выбора или управления вашими данными на основе type
или v
.
Если вы хотите, чтобы изменить порядок столбцов, чтобы точно соответствовать порядку, показанный на желаемый результат, вы можете использовать df.reindex
:
df = df.reindex(columns=sorted(df.columns, key=lambda x: x[::-1]))
дает
v1 v2 v1 v2
type A A B B
id
1 6 9 4 2
2 3 7 3 6
И если вы хотите, чтобы выровнять колонки индекс до одного уровня, затем
df.columns = ['{}_{}'.format(t, v) for v,t in df.columns]
дает
A_v1 A_v2 B_v1 B_v2
id
1 6 9 4 2
2 3 7 3 6