我已经为这种逻辑而苦苦挣扎了几天。可以说我有一个看起来像这样的数据框。我只是做了一些虚拟数据,所以可能没有太大意义:
+----+---------------+------------+
|Id |prescr_testdrug|diagnosis |
+---------+----------+------------+
|0 |Yes |[a,b,c] |
|1 |Yes |[b,c] |
|2 |No |[b,c,d] |
|3 |Yes |[a] |
|4 |No |[c,d] |
|5 |No |[d,e] |
|6 |No |[a,f] |
|7 |Yes |[c] |
|8 |Yes |[a,d,e] |
|9 |Yes |[a] |
+----+---------------+------------+
我想根据每种不同的诊断的4种不同情况获得计数:
Case1 =处方和诊断患者的计数
Case2 =开处方但未诊断出患者的计数
Case3 =未处方和诊断患者的计数
Case4 =未开处方且未诊断出患者的计数
我知道,如果对诊断做groupBy('diagnosis','prescr_testdrug').count()
之后做explode()
,我基本上可以得到Case1和Case 3的计数(每种诊断的频率为Yes和No)。但是,我无法确定如何获取其他两种情况的值。
这基本上是我希望最终数据帧看起来像的样子
+---------+------+------+------+------+
|diagnosis|Case1 |Case2 |Case3 |Case4 |
+---------+------+------+------+------+
|a | 4| 2| 1| 3|
|b | 2| 4| 1| 3|
|c | 3| 3| 2| 2|
|d | 1| 5| 2| 2|
|e | 1| 5| 1| 3|
|f | 0| 6| 1| 3|
+---------+------+------+------+------+
例如,对于第一行,有4位患者被处方了该药并被诊断为“ a”; 2名患者也被处方了药物并且没有诊断为“ a”; 1名患者未开药且诊断为“ a”;没有给3名患者开药,也没有诊断为“ a”
感觉很简单,但是我已经为此花了好一会儿。
执行此操作的最佳方法是什么?
答案 0 :(得分:0)
Fisrt,您可以尝试编写UDF以生成非诊断集
ICD10代码总计-诊断=未诊断
+----+---------------+------------+-------------+
|Id |prescr_testdrug|diagnosis |not diagnosis|
+---------+----------+------------+-------------+
|0 |Yes |[a,b,c] |[d,e] |
|1 |Yes |[b,c] |[a,d,e] |
|2 |No |[b,c,d] |. |
|3 |Yes |[a] |. |
|4 |No |[c,d] |. |
|5 |No |[d,e] |. |
|6 |No |[a,f] |. |
|7 |Yes |[c] |. |
|8 |Yes |[a,d,e] |. |
|9 |Yes |[a] |. |
+----+---------------+------------+-------------+
通过诊断explode()您可以获得案例1和案例3 通过未诊断到explode()可以得到案例2和案例4
Update1:
当您进行诊断并按诊断分组时,您可以得到以下表格,但是我不知道如何区分case2和case4。
我们可以通过计数 患者总数-prescr_testdrug是计数-prescr_testdrug没有计数=病例2 +病例4
+----------+-------------------+-------------------+-------------+
|diagnosis |prescr_testdrug Yes| prescr_testdrug No| case2/case4 |
+----------+-------------------+-------------------+-------------+
|a |[0,3,8,9] |[6] | |
|b |[0,1] |[2] | |
|c |[0,1,7] |[2,4] | |
|d |[8] |[4] | |