Pyspark: рассчитывает на основе условий для нескольких значений - PullRequest
0 голосов
/ 19 марта 2019

Я боролся с этой логикой в ​​течение нескольких дней. Допустим, у меня есть датафрейм, который выглядит следующим образом. Я просто сделал несколько фиктивных данных, чтобы они не имели особого смысла:

+----+---------------+------------+
|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 = подсчитывает, где пациентам прописали, а не поставили диагноз

Случай 3 = количество случаев, когда пациентам не назначали и не ставили диагноз

Случай 4 = количество случаев, когда пациентам не прописывали и не ставили диагноз

Я знаю, что если я сделаю groupBy('diagnosis','prescr_testdrug').count() после того, как сделаю explode() по диагностике, я в основном могу получить счет для случая 1 и случая 3 (частота Да и Нет для каждого диагноза). Однако я не могу понять, как получить значения для двух других случаев.

Это в основном то, что я хочу, чтобы мой окончательный кадр данных выглядел так:

+---------+------+------+------+------+
|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 пациентам был назначен препарат И был поставлен диагноз «а»; 2 пациентам также был назначен препарат И не было диагноза «а»; 1 пациенту не был назначен препарат И был поставлен диагноз «а»; 3 пациентам не был назначен препарат, и у них не было диагнозов «а»

Кажется, все так просто, но я просто покачиваюсь над этим некоторое время.

Каков наилучший способ сделать это?

1 Ответ

0 голосов
/ 19 марта 2019

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]         |.            |
+----+---------------+------------+-------------+

взорвать ()диагноз вы можете получить случай 1 и случай 3 взорвать (), не диагноз вы можете получить случай 2 и случай 4

Update1:

Когда вы выставите и сгруппировать по диагнозу, вы можете получить следующую форму, но я не знаю, как провести различие между case2 и case4.

Мы можем рассчитать число общее количество пациентов - prescr_testdrug Да количество - prescr_testdrug Нет количества = case2 + case 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]                |             |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...