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