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.
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
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
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
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
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.
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%Tags und Links python pandas multi-index variable-assignment