2013-08-15 3 views
11

Как преобразовать существующий dataframe с одноуровневыми столбцами, чтобы иметь иерархический индекс индекс столбцов (MultiIndex)?Преобразование столбцов данных в MultiIndex

Пример dataframe:

In [1]: 
import pandas as pd 
from pandas import Series, DataFrame 

df = DataFrame(np.arange(6).reshape((2,3)), 
       index=['A','B'], 
       columns=['one','two','three']) 
df 
Out [1]: 
    one two three 
A 0 1  2 
B 3 4  5 

Я бы подумал, что переиндексации() будет работать, но я получаю Нэн:

In [2]: 
df.reindex(columns=[['odd','even','odd'],df.columns]) 
Out [2]: 
    odd even odd 
    one two three 
A NaN NaN NaN 
B NaN NaN NaN 

То же самое, если я использую DataFrame():

In [3]: 
DataFrame(df,columns=[['odd','even','odd'],df.columns]) 
Out [3]: 
    odd even odd 
    one two three 
A NaN NaN NaN 
B NaN NaN NaN 

Этот последний подход действительно работает, если я укажу df.значения:

In [4]: 
DataFrame(df.values,index=df.index,columns=[['odd','even','odd'],df.columns]) 
Out [4]: 
    odd even odd 
    one two three 
A 0  1  2 
B 3  4  5 

Каков правильный способ сделать это? Почему reindex() дает NaN?

ответ

14

Вы были близки, просто установить колонки непосредственно на новый (равный размеру) индекс типа (который, если его список-оф-список будет конвертировать в мультииндексом)

In [8]: df 
Out[8]: 
    one two three 
A 0 1  2 
B 3 4  5 

In [10]: df.columns = [['odd','even','odd'],df.columns] 

In [11]: df 
Out[11]: 
    odd even odd 
    one two three 
A 0  1  2 
B 3  4  5 

Reindex будет переупорядочить/фильтровать существующий индекс. Причина, по которой вы получаете все nans, заключается в том, что вы говорите, что найду существующие столбцы, соответствующие этому новому индексу; нет совпадения, так вот что вы получаете

Смежные вопросы