使用 pandas 将原始临床试验数据构建到列中以进行机器学习

问题描述 投票:0回答:1

我的任务是对来自 3 个不同表的数据进行建模,以适应机器学习模型

我正在观察 1300 名患者,他们正在服用药物、获取实验室结果并回应口头调查。信息每周记录一次,持续 24 周。

我的目标是将数据输入一个模型,该模型将预测药物疗效的结果。

数据以 3 个表格的形式提供给我。这是表格的样子

表1

患者ID 药物治疗 MG_剂量
1 2 1.0 32
2 2 2.0 20

表2

患者ID 测试1 测试2
1 2 0.0 1.0
2 2 1.0 0.0

表3

患者ID 调查Q1 调查第二季度
1 2 1.0 0.0
2 2 0.0 1.0

我正在尝试构建数据,其中每个患者都在自己的列中,如下所示

临床数据 患者1 患者2 患者3
第一周医学 1.0 2.0 1.0
第 1 周剂量 32 20 32
第 1 周测试 1 1.0 0.0 1.0
第 1 周测试 2 1.0 0.0 1.0
第一季度调查 1.0 0.0 1.0
第 1 周调查第 2 季度 0.0 1.0 0.0
第二周医学 1.0 2.0 1.0
第2周剂量 32 20 32
第二周测试1 1.0 0.0 1.0
第2周测试2 1.0 0.0 1.0
第 2 周调查第一季度 1.0 0.0 1.0
第 2 周调查第 2 季度 1.0 0.0 1.0

我最初尝试使用 pandas 中的 .join() 函数来聚合 3 个表中的数据。数据相对原始且未格式化。加入表格后,我的测试结果数量增加了 400%,所以数字完全不对。

我尝试将结果从行转向列;该表创建了一个嵌套索引,其中包含每种药物的 24 周表(见图),该索引太宽,无法用于分析。还有很多 nan 值很难在该结构中进行估算。

我正在研究一种解决方案来构建某种自动化,使用循环从 3 个不同的表中收集数据,并映射到列中的相应行。

我是一个Python新手用户,如果您对代码有任何见解,我将不胜感激。

干杯!

pandas machine-learning data-modeling
1个回答
0
投票

你需要重塑,这里有一个选项

concat
+
stack
/
unstack
:

tables = [Table_1, Table_2, Table_3]

out = (pd
   .concat([t.set_index(['PatientID', 'Week']) for t in tables], axis=1)
   .stack().unstack(level='PatientID').add_prefix('Patient ')
   .pipe(lambda d: d.set_axis('Week'+d.index.get_level_values('Week').astype(str)
                              +' '+d.index.get_level_values(1))
        )
   .rename_axis(index='Clinical Data', columns=None).reset_index()
)

或者使用

functools.reduce
+
merge
melt
+
pivot

from functools import reduce

tables = [Table_1, Table_2, Table_3]

out = (reduce(lambda a, b: a.merge(b, on=['PatientID', 'Week']), tables)
 .melt(['PatientID', 'Week'])
 .assign(**{'Clinical Data': lambda d: 'Week'+d.pop('Week').astype(str)
                                       +' '+d.pop('variable')})
 .pivot(index='Clinical Data', columns='PatientID', values='value')
 .rename_axis(columns=None).reset_index()
)

输出:

      Clinical Data  Patient 1  Patient 2
0  Week2 Medication        1.0        2.0
1     Week2 MG_dose       32.0       20.0
2      Week2 Test 1        0.0        1.0
3      Week2 Test 2        1.0        0.0
4   Week2 Survey Q1        1.0        0.0
5   Week2 Survey Q2        0.0        1.0
© www.soinside.com 2019 - 2024. All rights reserved.