Pandas Multiindex Zuordnung von einem anderen Datenrahmen

8

Ich versuche, pandas MultiIndex DataFrame s zu verstehen und ihnen Daten zuzuweisen. Insbesondere bin ich daran interessiert, ganze Blöcke zuzuweisen, die zu einem anderen kleineren Datenrahmen passen.

%Vor%

df ist das gleiche, außer dass alle Werte NaN sind und zwei Blöcke A und B vorhanden sind. Wenn ich nun die Werte von df_ bis df zuweisen möchte, würde ich mir vorstellen, dass ich sowas wie

machen kann %Vor%

Keine davon funktioniert, sie belassen alle Werte in df als NaN , obwohl df.loc[idx['A', :]] mir eine Scheibe des Datenrahmens gibt, die genau mit der des Unterrahmens übereinstimmt ( df_ ). Ist es also möglich, Werte in einer Ansicht zu setzen? Explizites Iterieren über den Index in df_ funktioniert

%Vor%

Ist es überhaupt möglich, ganze Blöcke wie folgt zuzuweisen (so ähnlich wie NumPy )? Wenn nicht, ist das in Ordnung, ich versuche nur zu verstehen, wie das System funktioniert.

Es gibt eine verwandte Frage zu Index-Slicern, aber es geht darum, einem maskierten Teil von DataFrame einen einzelnen Wert zuzuweisen und nicht Blöcke zuzuweisen. Pandas: Richtige Weise Festlegen von Werten basierend auf der Bedingung für eine Teilmenge des Multiindex-Datenrahmens

    
Matti Lyra 10.02.2015, 12:19
quelle

2 Antworten

12

Wenn Sie

verwenden %Vor%

Pandas versucht den Index von df_ mit dem Index eines Sub-DataFrame von zu verknüpfen %Code%. Im Punkt im Code , in dem die Ausrichtung durchgeführt wird, wird der Sub-DataFrame hat einen MultiIndex , nicht den einzelnen Index, den Sie als Ergebnis sehen von df .

Die Ausrichtung schlägt fehl, weil df.loc['A', :] einen einzelnen Index hat, nicht den MultiIndex wird gebraucht. Um zu sehen, dass der Index von df_ tatsächlich das Problem ist, beachte das

%Vor%

ist erfolgreich und ergibt etwas wie

%Vor%

Natürlich möchten Sie wahrscheinlich nicht jedes Mal einen neuen MultiIndex erstellen müssen Zeit, der Sie einen Werteblock zuweisen möchten. Also stattdessen, um das zu umgehen Ausrichtungsproblem, können Sie ein NumPy-Array als Zuweisungswert verwenden:

%Vor%

Da df_ ein NumPy-Array ist und ein Array keinen Index hat, keine Ausrichtung ist durchgeführt und die Zuweisung ergibt das gleiche Ergebnis wie oben. Dieser Trick der Verwendung eines NumPy-Arrays, wenn Sie die Ausrichtung von Indizes nicht möchten gilt für viele Situationen bei der Verwendung von Pandas.

Beachten Sie auch, dass das Assignment-by-NumPy-Array Ihnen auch bei komplizierteren Zuweisungen helfen kann, z. B. bei Zeilen, die nicht zusammenhängend sind:

%Vor%

ergibt

%Vor%

zum Beispiel.

    
unutbu 10.02.2015, 13:19
quelle
0

Ich habe 8480 eine Weile zurück getan, was die Zuweisung von Teilbildern mit Spalten ermöglicht. Sie können also folgendermaßen vorgehen:

%Vor%

Das heißt, Sie könnten dies als Bug auf GitHub veröffentlichen.

edit : Das Hinzufügen eines Dummy-Slices am Ende funktioniert auch:

%Vor%     
behzad.nouri 10.02.2015 13:03
quelle