我有这样的数据:
patient = "person1"
treatment = "treatment1"
doses = [dose1, dose2, dose3, ...]
,其中
dose = {"drug_name": "A", "drug_dose": 10}
dose2 = {"drug_name": "A", "drug_dose": 15}
dose3 = {...}
我需要将其转换为以下形式的pandas multiindex:
"drug_name" "drug_dose"
"patient_id" "treatment_name"
"person1" "treatment1" "A" 10
"A" 15
然后继续向数据框添加新条目(新患者和现有患者的新治疗方法)。
我首先考虑首先制作一个大的嵌套字典,收集其中的所有数据,然后将其转换为数据帧。然而,这并不起作用,因为一个人可能有几个疗程的治疗1" - 我们在dict中不能有重复的密钥。 (但我们可以有重复的索引,对吗?)
然后我考虑制作一个空的多索引数据框并在当时添加一个条目,但事实证明这对我的熊猫技能来说太难了。怎么可以这样做?
或者是否有一种我没有看到的更好的方法?
答案 0 :(得分:0)
实际上,您可以将每个剂量表示为字典,但您也需要添加患者和治疗标识符,在创建数据框后,患者和治疗以及每个剂量的唯一编号/标识符可以设置为索引< / p>
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)
您可以使用
添加新行df.ix[(3,'patient2','treatment2'),["drug_name","drug_dose"]]=['B',10]
print(df)
BtW:输入数据的最简单方法是使用以下格式创建逗号分隔值csv
文件
Patient,Treatment,drug_dose,drug_name
patient1,trearment1,10.0,A
.....
然后使用pd.read_csv(filename)