2017-01-25 9 views
0

zu Multiindex:Hinzufügen eines Eintrags Datenrahmen

patient = "person1" 
treatment = "treatment1" 
doses = [dose1, dose2, dose3, ...] 

wo

dose = {"drug_name": "A", "drug_dose": 10} 
dose2 = {"drug_name": "A", "drug_dose": 15} 
dose3 = {...} 

Ich brauche diese in eine Pandas Multiindex der folgenden Form drehen:

       "drug_name" "drug_dose" 
"patient_id" "treatment_name"  
"person1"  "treatment1"  "A"    10 
            "A"    15 

Und dann fügen Sie immer neue Einträge (sowohl neue Patienten, als auch neue Behandlungen für bestehende Patienten) zum Datenrahmen hinzu.

Zuerst dachte ich daran, ein großes verschachteltes Wörterbuch zu erstellen, alle Daten darin zu sammeln und am Ende in einen Datenrahmen zu verwandeln. Das funktioniert jedoch nicht, weil eine Person mehrere Kurse von "treatment1" haben kann - und wir können keine doppelten Schlüssel in einem dict haben. (Aber wir können doppelte Indizes haben, richtig?)

Dann dachte ich daran, einen leeren Multiindex-Datenrahmen zu machen und einen Eintrag zu der Zeit hinzuzufügen, aber es erwies sich als zu schwierig für meine Pandas Fähigkeiten. Wie könnte das gemacht werden?

Oder gibt es einen insgesamt besseren Ansatz, den ich nicht sehe?

Antwort

0

Eigentlich können Sie jede Dosis als Wörterbuch darstellen, aber Sie müssen den Patienten und die Behandlungskennung hinzufügen. Nach dem Erstellen eines Datenrahmens können Patient und Behandlung sowie eine eindeutige Nummer/Kennung für jede Dosis als Index festgelegt werden

import pandas as pd 

patient='patient1' 
treatment ="trearment1" 
dose1 = {"drug_name": "A", "drug_dose": 10} 
dose2 = {"drug_name": "A", "drug_dose": 15} 
dose3 = {"drug_name": "B", "drug_dose": 15} 

doses = [dose1,dose2,dose3] 

for dose in doses: 
    dose.update({'Patient':patient,'Treatment':treatment}) 

df = pd.DataFrame(doses).reset_index().set_index(['index','Patient','Treatment']) 

print(df) 

Ausgang wird enter image description here

Sie eine neue Zeile hinzufügen können mit

df.ix[(3,'patient2','treatment2'),["drug_name","drug_dose"]]=['B',10] 
print(df) 

df wird wie folgt aussehen: enter image description here

BTW: Der einfachste Weg, die Daten einzugeben, wenn Sie eine durch Kommata getrennte Werte csv Datei in folgendem Format

Patient,Treatment,drug_dose,drug_name 
patient1,trearment1,10.0,A 
..... 

dann lesen Sie die csv in einen Datenrahmen erstellen mit pd.read_csv(filename)

Verwandte Themen