Konstruieren von 3D-Pandas DataFrame
Ich Schwierigkeiten beim konstruieren eines 3D-DataFrame in Pandas. Ich möchte so etwas wie dies
A B C
start end start end start end ...
7 20 42 52 90 101
11 21 213 34
56 74 9 45
45 12
Wo A
, B
etc sind die top-level-Deskriptoren start
und end
sind subdescriptors. Die zahlen, die Folgen, sind zu zweit und es gibt nicht die gleiche Anzahl von Paaren für A
, B
etc. Beachten Sie, dass A
hat vier solche Paare, B
hat nur 1, und C
3.
Ich bin mir nicht sicher, wie Sie Vorgehen bei der Konstruktion dieser DataFrame. Ändern diese Beispiel gar nicht, mir die entworfen, Ausgabe:
import numpy as np
import pandas as pd
A = np.array(['one', 'one', 'two', 'two', 'three', 'three'])
B = np.array(['start', 'end']*3)
C = [np.random.randint(10, 99, 6)]*6
df = pd.DataFrame(zip(A, B, C), columns=['A', 'B', 'C'])
df.set_index(['A', 'B'], inplace=True)
df
ergab:
C
A B
one start [22, 19, 16, 20, 63, 54]
end [22, 19, 16, 20, 63, 54]
two start [22, 19, 16, 20, 63, 54]
end [22, 19, 16, 20, 63, 54]
three start [22, 19, 16, 20, 63, 54]
end [22, 19, 16, 20, 63, 54]
Gibt es eine Möglichkeit, brechen die Listen in C in eigene Spalten?
EDIT: Die Struktur meiner C
ist wichtig. Es sieht wie folgt aus:
C = [[7,11,56,45], [20,21,74,12], [42], [52], [90,213,9], [101, 34, 45]]
Und die gewünschte Ausgabe ist der eine an der Spitze. Es stellt die Start-und End-Punkte der untersequenzen innerhalb einer bestimmten Sequenz (A
, B
. C
sind die verschiedenen Sequenzen). Abhängig von der Sequenz selbst gibt es eine unterschiedliche Anzahl von untersequenzen, die einer bestimmten Bedingung genügen, was ich Suche. Als Ergebnis gibt es eine unterschiedliche Anzahl von start:Ende Paare für A
, B
usw
- Es ist etwas genannt als Panel in Pandas. Aber seine veraltet und wird ersetzt durch pandas.pydata.org/pandas-docs/stable/reference/api/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ersten, ich glaube, Sie brauchen, um füllen Sie C, um die Darstellung fehlender Werte
Dann, konvertieren Sie Sie in ein numpy-array transponieren, und geht auf den DataFrame Konstruktor zusammen mit den Spalten.
C=[[...],[...],[...]...]
da jede verschachtelte Liste hat eine andere Länge. Wie könnte ich mit der situation umgehen?C
ist nicht gleich der Länge desA
undB
one
hat eine unterschiedliche Anzahl von start:Ende Paare alstwo
C
auf die Frage. Die gewünschte Ausgabe war das, was gezeigt wurde, an der Spitze. Vielen Dank für die Hilfe!C
's-Struktur, aber ich bin mir nicht bewusst, einen besseren Weg, um die Daten darstellen.Kannst du nicht einfach ein panel?
Als @Aaron erwähnt in einem Kommentar oben, Platten, wurden verworfen. Auch, @tlnagy erwähnt seine dataset wäre wahrscheinlich zu erweitern, um mehr als 3 Dimensionen in die Zukunft.
Das klingt wie ein guter use-case für die xarray - Paket, das bietet semantisch gekennzeichnet arrays von beliebig vielen Dimensionen. Pandas und xarray haben starke conversion-Unterstützung, und die Platten wurden verworfen zugunsten der Verwendung von xarray.
Ersteinrichtung des Problems.
Können Sie dann erstellen Sie eine dreidimensionale xarray.DataArray Objekt etwa so:
Drehen wir unsere drei 2D-numpy-arrays in xarray.DataArray Objekte, und dann verketten Sie zusammen eine neue dimension.
Unsere Ausgabe sieht so aus: