2015-06-22 2 views

ответ

2

Вы можете использовать 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 
Смежные вопросы