2016-09-10 3 views
0

Ich habe einen Datenrahmen wie unten dataframeIterieren über Multiindex Datenrahmen

gezeigt habe ich ein Problem über die Zeilen in iteriert. Für jede abgerufene Zeile möchte ich den Schlüsselwert zurückgeben. Zum Beispiel in der zweiten Reihe für 2016-08-31 00:00:01 Eintrag df1 & df3 hat Kompass-Wert 4.0, also wollte ich die Schlüssel zurückgeben, die den gleichen Kompass-Wert hat, der in diesem Fall Df1 & I ist wurden Zeilen iterieren

for index,row in df.iterrows(): 

Antwort

1

aktualisieren

okay, so jetzt mit ich Ihre Frage besser zu verstehen, wird dies für Sie arbeiten. Erste Änderung der Form des Datenrahmens mit

dfs = df.stack().swaplevel(axis=0) 

Dies wird Ihre Datenrahmen aussehen lassen wie:

enter image description here

Dann Sie, bevor Sie die Zeilen wie laufen kann und extrahieren Sie die gewünschten Informationen. Ich benutze nur print-Anweisungen für alles, aber Sie können dies in eine geeignetere Datenstruktur einfügen.

for index, row in dfs.iterrows(): 
    dup_filter = row.duplicated(keep=False) 
    dfss = row_tuple[dup_filter].index.values 
    print("Attribute:", index[0]) 
    print("Index:", index[1]) 
    print("Matches:", dfss, "\n") 

, die etwas auszudrucken wird wie

..... 

Attribute: compass 
Index: 5 
Matches: ['df1' 'df3'] 

Attribute: gyro 
Index: 5 
Matches: ['df1' 'df3'] 

Attribute: accel 
Index: 6 
Matches: ['df1' 'df3'] 

.... 

könnten Sie tun es auch ein Attribut in einer Zeit von

dfs_compass = df.stack().swaplevel(axis=0).loc['compass']

und durchlaufen die Zeilen nur mit dem Index.

Old

Wenn ich das richtig verstehe Ihre Frage, dh Sie können die Indizes der Zeilen zurückgeben möchten, die auf der zweiten Ebene der Spalten passende Werte haben, dh (‚Kompass‘, ‚Accel‘, ' Gyro "). Folgendes wird funktionieren.

compass_match_indexes = [] 

for index, row in df.iterrows(): 
    match_filter = row[:, 'compass'].duplicated() 
    if len(row[:, 'compass'][match_filter] > 0) 
     compass_match_indexes.append(index) 

können Sie wählen verwenden, um Ihren Datenrahmen mit dieser Liste wie df.loc[compass_match_indexes]

-

Einen anderen Ansatz, könnten Sie die Transformation Ihres Datenrahmen mit df.T erhalten und verwenden Sie dann die duplicated Funktion.

+0

danke für deine antwort. Eigentlich wollte ich die Schlüssel nicht die Indizes zurückgeben. Wie für Zeile 1 in der obigen Abbildung wollte ich df1 und df3 als gleichen Kompasswert zurückgeben. Ich bin nicht in der Lage, die Schlüssel im multiIndex des Datenrahmens zu erhalten. @ Josh –

Verwandte Themen