Ich habe eine Liste von Tupeln wie
data = [
('r1', 'c1', avg11, stdev11),
('r1', 'c2', avg12, stdev12),
('r2', 'c1', avg21, stdev21),
('r2', 'c2', avg22, stdev22)
]
und ich möchte sie in einen Pandas DataFrame mit Zeilen, die durch die erste Spalte benannt sind, und Spalten, die durch die zweite Spalte benannt sind, einfügen. Die Art und Weise, wie die Zeilennamen gepflegt werden, scheint ungefähr so zu sein, pandas.DataFrame([x[1:] for x in data], index = [x[0] for x in data])
aber wie kümmere ich mich um die Spalten, um eine 2x2-Matrix zu erhalten (die Ausgabe des vorherigen Satzes ist 3x4)? Gibt es eine intelligentere Möglichkeit, sich auch um Zeilenbeschriftungen zu kümmern, anstatt sie explizit wegzulassen?
EDIT Es scheint , dass ich zwei Datenrahmen benötigt - eine für Mittelwerte und eine für Standardabweichungen, ist das richtig? Oder kann ich in jeder "Zelle" eine Werteliste speichern?
quelle
Antworten:
Sie können Ihren DataFrame nach dem Erstellen schwenken:
>>> df = pd.DataFrame(data) >>> df.pivot(index=0, columns=1, values=2) # avg DataFrame 1 c1 c2 0 r1 avg11 avg12 r2 avg21 avg22 >>> df.pivot(index=0, columns=1, values=3) # stdev DataFrame 1 c1 c2 0 r1 stdev11 stdev12 r2 stdev21 stdev22
quelle
0
und Spalte mit Namen1
sind nicht sehr schön ...Ich gehe davon aus, dass es besser ist, Ihre Daten so zu belassen, wie sie sind:
df = pandas.DataFrame(data, columns=['R_Number', 'C_Number', 'Avg', 'Std']) # Possibly also this if these can always be the indexes: # df = df.set_index(['R_Number', 'C_Number'])
Dann ist es etwas intuitiver zu sagen
df.set_index(['R_Number', 'C_Number']).Avg.unstack(level=1)
Auf diese Weise ist es implizit so, dass Sie versuchen, die Durchschnittswerte oder Standardabweichungen neu zu formen. Während es nur verwendet wird
pivot
, basiert es ausschließlich auf der Spaltenkonvention, welche semantische Entität Sie umformen.quelle
[R_Number, C_Number]
Sie diesdf.ix[('r1','c2')]
beispielsweise nach dem Festlegen des Index tun . Oder Sie können beide als reguläre Spaltendf[(df.R_Number == 'r1') & (df.C_Number == 'c2')]
pivot
möchten, darin, eine Tabelle so zu formatieren, dass sie gut auf dem Bildschirm gedruckt oder gut in HTML, LaTeX oder .csv oder etwas anderes exportiert wird. Wie das Formatieren einer Tabelle, die in eine Präsentation oder Artikeleinreichung aufgenommen wird. Andernfalls möchten Sie, um Daten effizient zu bearbeiten, dass es sich um Multi-Indizes handelt, wenn Sie können (wie Schlüssel zu einer Datenbanktabelle) oder zumindest um wiederholte Spalten, damit Sie effizient indizieren und verknüpfen können usw. wollen sie in ihre eigenen Spalten blasen.Folgendes habe ich erwartet, als ich zu dieser Frage kam:
#!/usr/bin/env python import pandas as pd df = pd.DataFrame([(1, 2, 3, 4), (5, 6, 7, 8), (9, 0, 1, 2), (3, 4, 5, 6)], columns=list('abcd'), index=['India', 'France', 'England', 'Germany']) print(df)
gibt
a b c d India 1 2 3 4 France 5 6 7 8 England 9 0 1 2 Germany 3 4 5 6
quelle