我需要根据另一个数据帧中的值创建一个分类变量。考虑表1,其中有医院就诊和患者ID。请注意,患者可以多次就诊:
+----------+------------+
| visit_id | patient_id |
+----------+------------+
| 10 | 1 |
| 20 | 1 |
| 50 | 2 |
| 100 | 3 |
| 110 | 3 |
+----------+------------+
我需要添加一个带有1或0的新字段,指示患者在医院就诊期间是否服用阿司匹林,如表2所示:
+----------+------------+---------------+
| visit_id | patient_id | medication |
+----------+------------+---------------+
| 10 | 1 | aspirin |
| 10 | 1 | ibuprofin |
| 20 | 1 | codine |
| 50 | 2 | aspirin |
| 100 | 3 | ibuprofin |
| 110 | 3 | acetaminophin |
| 110 | 3 | vicodin |
+----------+------------+---------------+
你可以再次看到多层次-你可以从医生那里得到不止一种药物,对吗?当然,这只是一个例子
我尝试合并表(内部连接),这很有效
tab1 = pd.merge(tab1, tab2, on=['visit_id','patient_id'])
tab1['aspirin_index'] = np.where(tab1['medication'].str.contains('aspirin',
flags=re.IGNORECASE, regex=True, na=False),1,0)
……但后来我给1号病人买了两份,他们同时服用阿司匹林和布洛芬。我只想知道他们是否至少吃过一次阿司匹林
+----------+------------+---------------+
| visit_id | patient_id | aspirin_index |
+----------+------------+---------------+
| 10 | 1 | 1 |
| 10 | 1 | 0 |
+----------+------------+---------------+
我需要到这里…和表1一样的形状,但只是有新的索引
+----------+------------+---------------+
| visit_id | patient_id | aspirin_index |
+----------+------------+---------------+
| 10 | 1 | 1 |
| 20 | 1 | 0 |
| 50 | 2 | 1 |
| 100 | 3 | 0 |
| 110 | 3 | 0 |
+----------+------------+---------------+
首先,让我们设置示例数据
有很多方法可以做到这一点。一种方法可能是将tab2过滤为仅阿司匹林,使用“left”连接将其连接到tab1,然后用0填充空值
这会给你一列“阿司匹林指数”。这样就完成了你的目标
但是一次用所有的药物做同样的练习怎么样。。。包括阿司匹林?sklearn有一些预处理函数,使这很容易
这是将分类数据作为二进制特征列获取的一种非常常见的方法。但它占用了大量的空间
如果坚持用一个列,把每次就诊的药物都列在一张单子上呢?这样你就可以进行文本搜索,而不必为稀有药物设置密集的0列
相关问题 更多 >
编程相关推荐