Pandas MultiIndex-Suche mit Numpy-Arrays

9

Ich arbeite mit einem Pandas DataFrame, der ein Diagramm darstellt. Der Datenrahmen wird durch einen MultiIndex indiziert, der die Endpunkte des Knotens angibt.

Setup:

%Vor%

Ich möchte in der Lage sein, mit einer Kanten-Teilmenge in den Graphen zu indizieren, weshalb ich mich für die Verwendung von MultiIndex entschieden habe. Ich kann das gut machen, solange die Eingabe in df.loc eine Liste von Tupeln ist.

%Vor%

Wenn meine Liste von Kanten jedoch ein numpliges Array ist (wie es oft der Fall ist) oder eine Liste von Listen, dann kann ich die Eigenschaft df.loc nicht verwenden.

%Vor%

Es wäre in Ordnung, wenn ich nur alle arr.tolist() hätte, aber das führt zu einem scheinbar anderen Fehler.

%Vor%

Es ist ein echter Schmerz, list(map(tuple, arr.tolist())) jedes Mal verwenden zu müssen, wenn ich eine Teilmenge auswählen möchte. Es wäre schön, wenn es einen anderen Weg gäbe, dies zu tun.

Die Hauptaufgaben sind:

  • Warum kann ich kein numerisches Array mit .loc verwenden? Liegt es daran, dass unter der Haube ein Wörterbuch verwendet wird, um die Multiindex-Labels Positionsindizes zuzuordnen?

  • Warum gibt eine Liste von Listen einen anderen Fehler? Vielleicht ist es wirklich das gleiche Problem, es ist nur auf eine andere Art und Weise gefangen?

  • Gibt es eine andere (idealerweise weniger ausführliche) Möglichkeit, eine Teilmenge eines Datenrahmens mit einer Reihe von Multi-Index-Labels zu durchsuchen, von denen ich nichts weiß?

Erotemic 05.01.2017, 19:25
quelle

1 Antwort

2

Ein Wörterbuchschlüssel ist unveränderlich, das ist im Grunde, warum Sie nicht eine Liste von Listen verwenden können, um auf Multiindex zuzugreifen.

Um mit loc auf multiindizierte Daten zugreifen zu können, müssen Sie das Array numpy in eine Liste von Tupeln konvertieren; Tupel sind unveränderlich, ein Weg dazu ist map zu verwenden, wie Sie

erwähnt haben

Wenn Sie die Verwendung von map vermeiden möchten und die Kanten aus einer CSV-Datei lesen, können Sie sie in einen Datenrahmen einlesen und to_records mit dem index -Attribut auf False verwenden. Ein anderer Weg könnte darin bestehen, einen Multi-Index aus ndarray zu erstellen, aber Sie müssen die Liste transponieren, bevor Sie sie übergeben, so dass jede Ebene eine Liste im Array ist

%Vor%

Ich fand den Artikel erweiterte Multi-Indizierung in der Pandas-Dokumentation sehr hilfreich

>     
sgDysregulation 31.01.2017 13:33
quelle

Tags und Links