2017-12-02 5 views
0

Ich habe meinen Datenrahmen organisiert, so etwas zu sehen, die groupby Funktion:gruppierten gestapelten Säulen in mehrere Spalten von in Pandas Gruppierung

Compound Sample Concentration x y 
Benzene A   15    Ax Ay 
      B   20    Bx By 
      C   17    Cx Cy 

Toluene A   23    Ax Ay 
      B   40    Bx By 

Xylene  A   70    Ax Ay 
      B   62    Bx By 
      C   55    Cx Cy 
      D   32    Dx Dy 

Wie unstack ich die Spalte in mehrere Spalten mit derselben Höhe mit den Gruppierungen als Spaltennamen? Ich möchte so etwas wie dies zu erreichen:

Sample Benzene Toluene Xylene x y 
A   15  23   70  Ax Ay 
B   20  40   62  Bx By 
C   17  0   55  Cx Cy 
D   0   0   32  Dx Dy  

bearbeiten ich die Indizes verloren, nachdem ich die groupby Funktion verwendet, meine Daten wie folgt aussehen verwendet:

Compound  Sample  Concentration   x y 
1 Benzene  A    15      Ax Ay 
5 Benzene  B    20      Bx By 
6 Benzene  C    17      Cx Cy 
0 Toluene  A    23      Ax Ay 
4 Toluene  B    40      Bx By 
2 Xylene  A    70      Ax Ay 
3 Xylene  B    62      Bx By 
7 Xylene  C    55      Cx Cy 
8 Xylene  D    32      Dx Dy 

ich durch die Verbindung sortiert, so dass neu geordnet alle Indizes, die zunächst nach Beispiel sortiert sind

+0

https://pandas.pydata.org/pandas- docs/stable/generated/pandas.DataFrame.unstack.html – Abhishek

Antwort

0

Basierend auf Ihrer Buchung, ist es nicht wirklich klar, welche Ihrer Spalten im Index sind. Wenn keiner von ihnen ist (die Sie mit df.reset_index zwingen können()), dann können Sie folgendes tun:

df.set_index(['Compound', 'Sample', 'x', 'y'], inplace = True) 
df = df['Concentration'] 
df = df.unstack(level = 0) 
df.reset_index(inplace = True) 

die einzige Art und Weise, dass dies nicht Ihre Ausgabe überein, dass die x- und y-Spalten sind jetzt auf der linken Seite Ihrer Daten. Da es so aussieht, als würden diese Spalten leicht aus dem Beispielbuchstaben erstellt werden, könnte es einfacher sein, sie nach dieser Umwandlung hinzuzufügen. Das heißt, wenn Ihre Gruppe hat Ihnen einen Datenrahmen mit der Verbindung und die Probe in dem Index und Konzentration als die einzige Spalte, könnten Sie einfach tun:

df = df['Concentration'].unstack(level = 0) 

und dann x und y Spalten hinzufügen.

Edit: Von Ihrem ursprünglichen Daten, könnten Sie tun dies auch, das tut, was Sie mit dem groupby tat und umformt in einem Schritt in:

df2 = pd.pivot_table(df, index = ['Sample', 'x', 'y'], columns = 'Compound', values = 'Concentration') 
+0

Die groupby -Funktion macht die Spalten, die Sie gruppieren, durch den Index, es sei denn, Sie sagen es nicht explizit mit der Option as_index = False. Die Tatsache, dass der zusammengesetzte Name nicht in jeder Zeile angezeigt wird, lässt mich glauben, dass er Teil des Indexes ist. –

+0

Ich gruppiert nach allen Spalten, also habe ich vielleicht alle Werte in den Index gesetzt? Ich bin mir nicht ganz sicher, wie es funktioniert. Ich habe meine Frage bearbeitet, um zu zeigen, wie sie aussah, bevor ich die groupby-Funktion verwendet habe. –

Verwandte Themen