2017-09-06 5 views
-1

Ich habe eine Sammlung von Messungen unter verschiedenen Parametern als Liste von Dicts gespeichert und in einen DataFrame konvertiert.Python Pandas Reshape Dataframe

import pandas as pd 
data = [{"Device": "A", "temperature": 0, "Load": 1, "Voltage": 5, "Measurement1": 0.1, "Measurement2": 0.9}, 
{"Device": "A", "temperature": 0, "Load": 2, "Voltage": 5, "Measurement1": 0.5, "Measurement2": 1.3}, 
{"Device": "A", "temperature": 40, "Load": 1, "Voltage": 5, "Measurement1": 0.2, "Measurement2": 1}, 
{"Device": "A", "temperature": 40, "Load": 2, "Voltage": 5, "Measurement1": 0.6, "Measurement2": 1.4}, 
{"Device": "B", "temperature": 0, "Load": 1, "Voltage": 5, "Measurement1": 0.3, "Measurement2": 1.1}, 
{"Device": "B", "temperature": 0, "Load": 2, "Voltage": 5, "Measurement1": 0.7, "Measurement2": 1.5}, 
{"Device": "B", "temperature": 40, "Load": 1, "Voltage": 5, "Measurement1": 0.4, "Measurement2": 1.2}, 
{"Device": "B", "temperature": 40, "Load": 2, "Voltage": 5, "Measurement1": 0.8, "Measurement2": 1.6}] 

df = pd.DataFrame(data, columns=['Device', 'temperature', 'Load', 'Voltage', 'Measurement1', 'Measurement2']) 
df 

Initial data Jupyter output

Dies ist ein Screenshot des desired structure.

Ich habe versucht, eine Pivot-Tabelle, da die Idee ziemlich ähnlich ist, mit Spalten/Index/Werte als Parameter, sowie separate Transponieren/Reindexing/Einstellung Spalten, aber ich konnte nicht die Kombination.

+0

Sorry, ich verstehe nicht. Können Sie die Ausgabe mit Ihren Eingabedaten hinzufügen? – jezrael

+0

Ich habe den ursprünglichen Beitrag mit überarbeiteten Daten aktualisiert. – Lorant

Antwort

0

Verwendung, set_index, T und stack:

df.set_index(['Load','Voltage','Device','temperature']).T.stack([0,1]) 

Ausgang:

Device      A   B  
temperature     0 40 0 40 
      Load Voltage      
Measurement1 1 5  0.1 0.2 0.3 0.4 
      2 5  0.5 0.6 0.7 0.8 
Measurement2 1 5  0.9 1.0 1.1 1.2 
      2 5  1.3 1.4 1.5 1.6 

Und Sie nicht diese Spalte Indexnamen rename_axis hinzufügen möchten:

(df.set_index(['Load','Voltage','Device','temperature']).T.stack([0,1]) 
     .rename_axis([None,None],1)) 

Ausgabe:

       A   B  
          0 40 0 40 
      Load Voltage      
Measurement1 1 5  0.1 0.2 0.3 0.4 
      2 5  0.5 0.6 0.7 0.8 
Measurement2 1 5  0.9 1.0 1.1 1.2 
      2 5  1.3 1.4 1.5 1.6