MultiIndex von Pandas ist praktisch, aber ich war süchtig danach, es einfach als mehrdimensionale Version von Index zu behandeln, also notieren Sie es sich.
Angenommen, die folgende Tabelle ist als "hoge.csv" vorhanden.
val | ||
---|---|---|
1 | a | b |
2 | c | d |
3 | a | d |
4 | b | c |
5 | a | b |
Wenn Sie andere Spalten als val in hoge.csv
als Index lesen, wird dies als DataFrame von MultiIndex gelesen.
>>> import pandas as pd
>>> df = pd.read_csv("hoge.csv", index_col=[0, 1])
>>> df
val
1 a b
2 c d
3 a d
4 b c
5 a b
Versuchen Sie, diesen entsprechenden DataFrame mit val zu filtern
>>> tmp_df = df.query("val=='b'")
>>> tmp_df.index
MultiIndex([(1, 'a'),
(5, 'a')],
)
Aus dem DataFrame aller fünf Elemente wurden zwei Elemente extrahiert.
Wenn Sie außerdem die 0. Ebene der Eigenschaft "Ebenen" für das gefilterte Ergebnis erhalten, erhalten Sie möglicherweise "1,5" ...
>>> tmp_df.index.levels[0]
Int64Index([1, 2, 3, 4, 5], dtype='int64')
Unabhängig vom Filter ** Die Elemente der 0. Ebene des ursprünglichen DataFrame werden abgerufen ** Dies ist ein Problem, da Sie manchmal die Werte jeder Ebene im Status nach dem Filtern extrahieren möchten, indem Sie Bedingungen für die Werte in der Tabelle festlegen.
Ebenen sind nur eine Liste, in der die in jeder Ebene enthaltenen Elemente gespeichert sind, und es scheint, dass sie durch Kombinieren durch Definieren der Beziehung zwischen den einzelnen Ebenen realisiert werden.
Brechen Sie daher MultiIndex ab, um einen einzelnen Index zu erstellen, der die Hierarchie verlässt, die Sie endgültig abrufen möchten, und wenden Sie dann einen Filter an.
>>> df.reset_index(level=1)
level_1 val
1 a b
2 c d
3 a d
4 b c
5 a b
>>> tmp_df = df.reset_index(level=1).query("val=='b'")
>>> tmp_df.index
Int64Index([1, 5], dtype='int64')
Wenn Sie dies tun, entspricht der Index dem Element des Filters. Wenn Sie also nach dem Filtern eine bestimmte Hierarchie abrufen möchten, müssen Sie wie oben beschrieben mit "reset_index" korrespondieren.
Wenn in reset_index
der Spaltenname von MultiIndex gelöscht wird, geben Sie den Namen an, und wenn nicht, geben Sie die Nummer der Hierarchie an, die im Argument von level =
freigegeben werden soll.
Recommended Posts