Я боролся с этой логикой в течение нескольких дней. Допустим, у меня есть датафрейм, который выглядит следующим образом. Я просто сделал несколько фиктивных данных, чтобы они не имели особого смысла:
+----+---------------+------------+
|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 пациентам не был назначен препарат, и у них не было диагнозов «а»
Кажется, все так просто, но я просто покачиваюсь над этим некоторое время.
Каков наилучший способ сделать это?