2013-08-12 6 views
2

Я очень близок, чтобы сходить с ума. У меня есть dataframe вроде этого:Как восстановить развернуть multiindex в pandas DataFrame

subject sessionIndex screenIndex index  key time 
    s019    1   3  1 Shift 0.3442 
    s019    1   3  2 Shift.t 0.1514 
    s019    1   3  3  h 0.0844 
    s019    1   3  4  e 0.1127 
    s019    1   3  5 space 0.1201 
    s091    3   5 821  h 0.1126 
    s091    3   5 822  a 0.1425 
    s091    3   5 823  n 0.0926 
    s091    3   5 824  d 0.1525 

после использования:

pivot_table(data,values='time', rows=['subject','sessionIndex','screenIndex','index'], cols=['key']) 

У меня есть следующие dataframe:

key          Shift Shift.t  a  d ... 
subject sessionIndex screenIndex index          
s019 1   3   1  0.3442  NaN  NaN  NaN ... 
           2   NaN 0.1514  NaN  NaN ... 
           3   NaN  NaN  NaN  NaN ... 
           4   NaN  NaN  NaN  NaN ... 
           5   NaN  NaN  NaN  NaN ... 
s091 3   5   821  NaN  NaN  NaN  NaN ... 
           822  NaN  NaN 0.1425  NaN ... 
           823  NaN  NaN  NaN  NaN ... 
           824  NaN  NaN  NaN 0.1525 ... 

Это здорово, но я застрял в "разворачиваться" в мультииндексных так что мой dataframe выглядит так:

subject sessionIndex screenIndex index Shift Shift.t  a  d ...        
s019 1   3   1  0.3442  NaN  NaN  NaN ... 
s019 1   3   2   NaN 0.1514  NaN  NaN ... 
s019 1   3   3   NaN  NaN  NaN  NaN ... 
s019 1   3   4   NaN  NaN  NaN  NaN ... 
s019 1   3   5   NaN  NaN  NaN  NaN ... 
s091 3   5   821  NaN  NaN  NaN  NaN ... 
s091 3   5   822  NaN  NaN 0.1425  NaN ... 
s091 3   5   823  NaN  NaN  NaN  NaN ... 
s091 3   5   824  NaN  NaN  NaN 0.1525 ... 

Я уже пробовал переиндексировать и индексировать сброс. Я довольно новичок в pandas и python, так что, может быть, я просто глуп. Пожалуйста, дайте мне знать, чего я здесь не вижу, Thx.

+0

Я не уверен, что вы подразумеваете под «разворачиваться». Хотя повторяющиеся знаки скрыты для показа, они все еще существуют. Но, возможно, вам хотелось бы, чтобы четыре уровня MultiIndex были обычными столбцами - в этом случае они отображались бы так, как вы указали, и в некоторых отношениях легче обрабатывать. В этом случае просто используйте результат '' df.reset_index() ''. –

+0

Привет, Дэн, спасибо за ваш ответ. Я уже пробовал это. Проблема в том, что эта команда также возвращает все переменные обратно в случаи. Поэтому мои данные по-прежнему называются pivot_table. – user2675976

+0

Хм. Это удивительно. Вы уверены, что выполняете reset_index по результату pivot_table, а не на исходном DataFrame? –

ответ

0

Это просто опция отображения в пандах.

Попробуйте добавить эту строку сразу после импорта панд: pandas.set_printoptions(multi_sparse=False)

+0

Привет, Пол, THX для вашего ответа. Моя проблема на самом деле не в форматировании. Я хочу использовать столбцы для выполнения некоторых селекторов. Это намного сложнее, когда столбцы объединены в multiindex. Поэтому я хочу восстановить столбцы индекса. – user2675976

+0

@ user2675976 Лучше сохранить индекс, ИМО. Метод dataframe.select может очень эффективно выполнять выборку для умножения значений «MultiIndex» (например, 'subset = df.select (lambda x: x [0] == 'S019' и s [2] в [3] , 5] и s [3] <= 5) ' –

+0

Thx Paul. Я решил свою проблему. Поскольку я хотел использовать различные критерии выбора после этого: \t train = data [data ['subject'] == user] \t \t train = train [train ['sessionIndex'] == 1] Кажется, проще восстановить данные. – user2675976

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