Pandas - Разблокировка до верхнего уровня столбца - PullRequest
2 голосов
/ 21 января 2020

У меня есть следующий фрейм данных:

df = pd.DataFrame({'Col1':[10,20,30,40,50], 'Col2':[60,70,80,90,100]}, index=pd.MultiIndex.from_arrays([['A','A','A','B','B'], [1,2,3,4,5]]))

Я хотел бы получить следующее:

'A'                'B' 
'Col1'  'Col2'    'Col1'   'Col2'
 10      60        NaN      NaN
 20      70        NaN      NaN
 30      80        NaN      NaN 
 NaN     NaN       40       90 
 NaN     NaN       50       100

Я пытался использовать df.unstack(0).swaplevel(0,1,axis=1), но это приводит к:

'A'     'B'       'A'      'B' 
'Col1'  'Col1'    'Col2'   'Col2'
10      NaN        60      NaN
20      NaN        70      NaN
30      NaN        80      NaN
NaN     40         NaN     90
NaN     50         NaN     100 

Может ли кто-нибудь указать мне правильное направление?

1 Ответ

3 голосов
/ 21 января 2020

sort индекс level=0 на axis=1, и вы получите желаемый вид:

df.unstack(0).swaplevel(0,1,axis=1).sort_index(axis=1)

   A           B       
   Col1  Col2  Col1   Col2
1  10.0  60.0   NaN    NaN
2  20.0  70.0   NaN    NaN
3  30.0  80.0   NaN    NaN
4   NaN   NaN  40.0   90.0
5   NaN   NaN  50.0  100.0
...