2016-07-26 20 views
2

ich struggeling um den richtigen (auf die auswahl) index zu bekommen, wenn ich die methode xs von pandas benutze, um bestimmte daten in meinem datenframe auszuwählen. Lassen Sie mich zeigen, was ich tue:pandas multiindex selecting ... wie bekomme ich das richtige (eingeschränkt auf auswahl) index

print(df) 
                  value 
idx1    idx2   idx3   idx4 idx5    
10    2.0   0.0010   1  2  6.0 ... 
               2  3  6.0 ... 
... 
               7  8  6.0 ... 
               8  9  6.0 ... 
20    2.0   0.0010   1  2  6.0 ... 
               2  3  6.0 ... 
... 
               18 19  6.0 ... 
               19 20  6.0 ... 

# get dataframe for idx1 = 10, idx2 = 2.0, idx3 = 0.0010 
print(df.xs([10,2.0,0.0010])) 

      value 
idx4 idx5    
1  2  6.0 ... 
2  3  6.0 ... 
3  4  6.0 ...  
4  5  6.0 ...  
5  6  6.0 ...  
6  7  6.0 ...  
7  8  6.0 ... 
8  9  6.0 ... 

# get the first index list of this part of the dataframe 
print(df.xs([10,2.0,0.0010]).index.levels[0]) 

[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19] 

So verstehe ich nicht, warum die vollständige Liste der Werte, die in idx4 auftreten zurückgegeben wird, auch wenn wir den Datenrahmen auf einen Teil beschränkt, in denen idx4 nur Werte von 1 nehmen zu 8. Ist es, dass ich die index Methode falsch verwende?

+0

Blick auf: http://stackoverflow.com/ Fragen/32585009/Datenframe-Slice-Does-Not-Remove-Index-Werte – desiato

Antwort

1

Dies ist eine bekannte Funktion nicht Bug. Pandas behält alle Indexinformationen bei. Über das Attribut labels können Sie bestimmen, welche der Ebenen ausgedrückt werden und an welcher Position.

Wenn Sie schauen, um einen Index zu erstellen, die frisch und enthält nur die Informationen, die für die Scheibe die Sie gerade gemacht, können Sie dies tun:

df_new = df.xs([10,2.0,0.0010]) 
idx_new = pd.MultiIndex.from_tuples(df_new.index.to_series(), 
            names=df_new.index.names) 
df_new.index = idx_new