2017-08-12 4 views
0

Die Datenrahmen unten ist ein Multi-indexierte Datenrahmen mit hierarchischen Spalten (df):Wie können mehrere Spalten aus verschiedenen Ebenen ausgewählt werden?

     EMG          Biofeedback  
Time  ID 
        delta theta alpha beta high beta gamma HeartRateVariabilty GSR  
20170101 PD102  4  5  8 3   0  9    1  2 
20170102 PD102  5  7  8 4   6  5    2  3  

Wie kann mehrere Spalten aus verschiedenen Ebenen ausgewählt werden? Für zB Wie kann ich die Datenrahmen alle zeigen EMG Spalten und nur die GSR Spalte unter der Biofeedback Spalte (wie unten)

     EMG          Biofeedback  
Time  ID 
        delta theta alpha beta high beta gamma GSR  
20170101 PD102  4  5  8 3   0  9  2  
20170102 PD102  5  7  8 4   6  5  3
+0

Haben Sie den Code haben, der diesen Datenrahmen erzeugt? –

Antwort

2

Hier sind einige Möglichkeiten/subselect Hierarchical Spalten zuzugreifen

1. Verwendung get_level_values ersten Ebene und ablehnen HeartRateVariabilty

In [764]: df.loc[:, df.columns.get_level_values(1) != 'HeartRateVariabilty'] 
Out[764]: 
       EMG         Biofeedback 
       delta theta alpha beta high beta gamma   GSR 
Time  ID 
20170101 PD102  4  5  8 3   0  9   2 
20170102 PD102  5  7  8 4   6  5   3 

2. Oder mit select und lehnen HeartRateVariabilty in der ersten Ebene

In [765]: df.select(lambda x: x[1] != 'HeartRateVariabilty', axis=1) 
Out[765]: 
       EMG         Biofeedback 
       delta theta alpha beta high beta gamma   GSR 
Time  ID 
20170101 PD102  4  5  8 3   0  9   2 
20170102 PD102  5  7  8 4   6  5   3 

3. Oder mit drop und lehnen HeartRateVariabilty in der ersten Ebene

In [766]: df.drop('HeartRateVariabilty', axis=1, level=1) 
Out[766]: 
       EMG         Biofeedback 
       delta theta alpha beta high beta gamma   GSR 
Time  ID 
20170101 PD102  4  5  8 3   0  9   2 
20170102 PD102  5  7  8 4   6  5   3 

4. Or , Unterauswahl Liste der Spaltenpaar-Tupel mit .loc

In [777]: cols = [('EMG', 'delta'), ('EMG', 'theta'), ('EMG', 'alpha'), ('EMG', 'beta'), 
        ('EMG', 'high beta'), ('EMG', 'gamma'), ('Biofeedback', 'GSR')] 
In [778]: df.loc[:, cols] 
Out[778]: 
       EMG         Biofeedback 
       delta theta alpha beta high beta gamma   GSR 
Time  ID 
20170101 PD102  4  5  8 3   0  9   2 
20170102 PD102  5  7  8 4   6  5   3 
+0

danke! Lösung 4 funktionierte am besten für mich, da ich mehrere Spalten unter Biofeedback benötigte, also GSR und ein anderes (nicht im Beispiel!). Nur für meine Information, ist es möglich, mehrere Spalten mit den Lösungen 1, 2, 3 zu löschen? – offthehook

+0

Ja, als Liste, und haben 'x nicht in [..]' Zustand wo erforderlich. – Zero

Verwandte Themen