在multiindex数据帧中添加一个条目

时间:2017-01-25 13:27:29

标签: python-3.x pandas

我有这样的数据:

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中不能有重复的密钥。 (但我们可以有重复的索引,对吗?)

然后我考虑制作一个空的多索引数据框并在当时添加一个条目,但事实证明这对我的熊猫技能来说太难了。怎么可以这样做?

或者是否有一种我没有看到的更好的方法?

1 个答案:

答案 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)

输出将是 enter image description here

您可以使用

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

df将如下所示: enter image description here

BtW:输入数据的最简单方法是使用以下格式创建逗号分隔值csv文件

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

然后使用pd.read_csv(filename)

将csv读入数据框