将原始临床试验数据结构化到带有pandas的列中以进行机器学习

nlejzf6q  于 2023-08-01  发布在  其他
关注(0)|答案(1)|浏览(131)

我的任务是对来自3个不同表的数据进行建模,以适应机器学习模型
我观察了1300名患者,他们正在服用药物,获得实验室结果,并对口头调查做出回应。信息每周记录一次,持续24周。
我的目标是将这些数据输入一个模型,预测药物疗效的结果。
数据在三个表格中提供给我。下面是table的样子
表1
| 周|药物治疗|MG_剂量| MG_dose |
| --|--|--| ------------ |
| 二个|1.0|三十二| 32 |
| 二个|2.0|二十| 20 |
表2
| 周|测试1|测试2| Test 2 |
| --|--|--| ------------ |
| 二个|0.0| 1.0| 1.0 |
| 二个|1.0| 0.0| 0.0 |
表3
| 周|调查Q1|调查Q2| Survey Q2 |
| --|--|--| ------------ |
| 二个|1.0| 0.0| 0.0 |
| 二个|0.0| 1.0| 1.0 |
我试着把每个病人在自己列的数据结构化,如下所示
| 患者1|患者2|患者3| Patient3 |
| --|--|--| ------------ |
| 1.0| 2.0| 1.0| 1.0 |
| 三十二|二十|三十二| 32 |
| 1.0| 0.0| 1.0| 1.0 |
| 1.0| 0.0| 1.0| 1.0 |
| 1.0| 0.0| 1.0| 1.0 |
| 0.0| 1.0| 0.0| 0.0 |
| 1.0| 2.0| 1.0| 1.0 |
| 三十二|二十|三十二| 32 |
| 1.0| 0.0| 1.0| 1.0 |
| 1.0| 0.0| 1.0| 1.0 |
| 1.0| 0.0| 1.0| 1.0 |
| 1.0| 0.0| 1.0| 1.0 |
我最初尝试在pandas中使用.join()函数来聚合3个表中的数据。数据相对原始且未格式化。加入表格后,我的测试结果数量增加了400%,所以数字完全不对。
我试图将结果从行转到列;该表创建了一个嵌套索引,其中包含每种药物的24周表(见图),这太宽了,无法用于分析。在该结构中也有许多nan值难以估算。
我正在研究一个解决方案来构建某种自动化,使用循环从3个不同的表收集数据,并Map到列中的适当行。
我是一个Python新手用户,对代码的任何见解将不胜感激。
干杯!

uqjltbpv

uqjltbpv1#

您需要重新整形,这里有一个选项,使用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 + mergemelt + 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

相关问题