einen multIndex Datenrahmen Gegeben:Filtering Zeilen von einem bestimmten Indexebene in einem Multiindex Datenrahmen
mux = pd.MultiIndex.from_arrays([
list('aaaabbbbbccdddddd'),
list('tuvwlmnopxyfghijk')
], names=['one', 'two'])
df = pd.DataFrame({'col': np.arange(len(mux))}, mux)
df
col
one two
a t 0
u 1
v 2
w 3
b l 4
m 5
n 6
o 7
p 8
c x 9
y 10
d f 11
g 12
h 13
i 14
j 15
k 16
Ist es möglich, Reihen zu halten, um entsprechend bis zu dem i-ten Wert der 0-ten Ebene des Datenrahmen?
Für i = 2, meine erwartete Ausgabe ist:
col
one two
a t 0
u 1
v 2
w 3
b l 4
m 5
n 6
o 7
p 8
Beachten Sie, dass nur Zeilen a und b im Zusammenhang gehalten werden, alles andere fallen gelassen wird. Ich hoffe, dass das Problem klar ist, aber wenn es nicht so ist, bitte fragen Sie nach Erklärungen.
Ich habe versucht:
idx = pd.IndexSlice
df.iloc[(idx[:2], slice(None))]
Aber das gibt mir nur die ersten beiden Zeilen in der gesamten df, nicht alle Reihen der ersten beiden Werte in der 0-ten Ebene.
Funktioniert 'df.loc [df.index.levels [0] [: 2] .values]' für Sie? Mir ist klar, dass es nicht sehr direkt ist, aber zumindest bekommt, was du brauchst? – johnchase
@johnchase Yup, es funktioniert für dieses Beispiel (zögern Sie nicht, eine Antwort zu schreiben). Ich habe gehofft, dass es eine Lösung gibt, die auf jedes Level übersetzt werden kann. Ich weiß, das funktioniert nicht für die 1. Ebene (nur die 0.). –