2013-08-12 4 views
2

Je suis très proche de devenir fou. J'ai un dataframe comme ceci:Comment faire pour restaurer unfold multiindex dans 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 

après utilisation:

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

Je le dataframe suivant:

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 ... 

qui est grand, mais je me suis collé à "dérouler" le multiindice afin que mon dataframe ressemble à ceci:

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 ... 

J'ai déjà essayé la réindexation et la réinitialisation d'index. Je suis assez nouveau pour les pandas et python alors peut-être que je suis juste stupide. S'il vous plaît laissez-moi savoir ce que je manque ici, Thx.

+0

Je ne suis pas sûr de ce que vous entendez par « déplier ». Bien que les indices répétés sont cachés à des fins d'affichage, ils sont toujours là. Mais peut-être souhaitez-vous que les quatre niveaux de MultiIndex soient des colonnes normales - dans ce cas, ils s'afficheront comme vous l'avez spécifié et seront, d'une certaine manière, plus faciles à gérer. Dans ce cas, utilisez simplement le résultat de '' df.reset_index() ''. –

+0

Salut Dan, merci pour votre réponse. J'ai déjà essayé ça. Le problème est que cette commande rétablit également toutes les variables en cas. Donc, mes données sont comme avant j'ai appelé pivot_table. – user2675976

+0

Hmm. C'est surprenant. Êtes-vous sûr d'exécuter reset_index sur le résultat de pivot_table, et non sur le DataFrame d'origine? –

Répondre

0

Ceci est simplement une option d'affichage chez les pandas.

Essayez d'ajouter cette ligne immédiatement après l'importation pandas géants: pandas.set_printoptions(multi_sparse=False)

+0

Bonjour Paul, merci pour votre réponse. Mon problème n'est pas le formatage. Je veux utiliser les colonnes pour exécuter certains sélecteurs. C'est beaucoup plus difficile lorsque les colonnes sont jointes dans un multi-index. Par conséquent, je veux restaurer les colonnes d'index. – user2675976

+0

@ user2675976 Il est préférable de garder l'index, IMO. La méthode 'dataframe.select' peut très puissamment exécuter des sélections sur des valeurs multiples d'un' MultiIndex' (par exemple, 'subset = df.select (lambda x: x [0] == 'S019' et s [2] dans [3 , 5] et s [3] <= 5) ' –

+0

Thx Paul J'ai résolu mon problème, car je voulais utiliser différents critères de sélection après: \t train = data [data ['subject'] == user] \t \t train = train [train ['sessionIndex'] == 1] il semble plus facile de restaurer les inices. – user2675976