Umformen ein pandas dataframe
angenommen, ein dataframe wie diese:
df = pd.DataFrame([[1,2,3,4],[5,6,7,8],[9,10,11,12]], columns = ['A', 'B', 'A1', 'B1'])
Ich würde gerne ein dataframe, das sieht aus wie:
was nicht funktioniert:
new_rows = int(df.shape[1]/2) * df.shape[0]
new_cols = 2
df.values.reshape(new_rows, new_cols, order='F')
natürlich könnte ich die Schleife über die Daten und machen Sie eine neue Liste, aber es muss einen besseren Weg geben. Irgendwelche Ideen ?
Ich fügte hinzu, eine robustere Antwort, dass verallgemeinert, die fast genau der situation, die Sie haben.
InformationsquelleAutor Moritz | 2017-03-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
pd.wide_to_long
Funktion gebaut, fast genau für diese situation, wo Sie viele der gleichen Variablen-Präfixe in einer anderen stelligen suffix. Der einzige Unterschied hier ist, dass die erste Reihe von Variablen, die nicht über ein suffix, so müssen Sie benennen Sie die Spalten zuerst.Das einzige Problem mit
pd.wide_to_long
ist, es muss eine Identifikation variablei
im Gegensatz zumelt
.reset_index
wird verwendet, um eine diese eindeutig identifizierende Spalte, die gelöscht wird später. Ich denke, dies kann behoben, in der Zukunft.InformationsquelleAutor Ted Petrou
Können Sie
lreshape
, für Spalteid
numpy.repeat
:EDIT:
lreshape
ist derzeit nicht dokumentiert, aber es ist möglich, es kann entfernt werden(mit pd.wide_to_long zu).Mögliche Lösung ist die Zusammenlegung aller 3 Funktionen zu einem - vielleicht
melt
, aber jetzt ist es nicht implementated. Vielleicht in einigen neuen version des pandas. Dann wird meine Antwort aktualisiert werden.pd.wide_to_long
? Es ist wie geschaffen für diese situation.Ich Editiere Lösung.
InformationsquelleAutor jezrael
Ich löste dies in 3 Schritten:
df2
hält nur die Daten, die Sie möchten, Hinzugefügt werden, um die ursprünglichen dataframedf
.df
Hinzugefügt wird, welche unter (und wurde verwendet, umdf2
.df2
zudf
.Etwa so:
Beachten Sie, wie wenn Sie
df.append()
müssen Sieignore_index=True
so sind die neuen Säulen, die an die index anstatt halten Sie Ihre alte index.Ihr Ergebnis sollte sein, Ihre ursprünglichen dataframe mit den Daten neu angeordnet, wie Sie wollte:
InformationsquelleAutor mprat
Verwenden
pd.concat()
etwa so:Ich sehe. Persönlich würde ich nur tun, dass in einer for-Schleife. Aber vielleicht @jezrael ist
lreshape
Lösung ist besser.InformationsquelleAutor Matthew