我目前正在嘗試使用一些醫療代碼來確定一個人是否患有某種疾病并且需要幫助,因為我嘗試搜索了幾天但找不到任何疾病。希望有人可以幫助我解決這個問題。考慮到我已將 excel 檔案 1 匯入 df1 并將 excel 檔案 2 匯入 df2,我如何使用 excel 檔案 2 來識別 excel 檔案 1 中的患者患有什么疾病并用標題指示他們?以下是資料外觀的示例。我目前正在為此使用 pandas Jupyter notebook。
Excel檔案1:
| 病人 | 初步診斷 | 二次診斷 | 二次診斷 2 | 二次診斷 3 | |
|---|---|---|---|---|---|
| 亞歷克斯 | 50322 | 50111 | |||
| 約翰 | 50331 | 60874 | 50226 | 74444 | |
| 彼得 | 50226 | 74444 | |||
| 彼得 | 50233 | 88888 |
Excel檔案2:
| 初步診斷 | 醫療代碼 |
|---|---|
| 2型糖尿病 | 50322 |
| 2型糖尿病 | 50331 |
| 2型糖尿病 | 50233 |
| 心血管疾病 | 50226 |
| 高血壓 | 50111 |
| 艾滋病 | 60874 |
| 艾滋病病毒 | 74444 |
| 艾滋病病毒 | 88888 |
預期輸出:
| 病人 | 2型糖尿病陽性 | 心血管疾病陽性 | 高血壓陽性 | 艾滋病陽性 | 艾滋病毒陽性 |
|---|---|---|---|---|---|
| 亞歷克斯 | 1 | 1 | 0 | 0 | 0 |
| 約翰 | 1 | 1 | 0 | 1 | 1 |
| 彼得 | 1 | 1 | 0 | 0 | 1 |
uj5u.com熱心網友回復:
IIUC,您可以 melt df1,然后從 reshape 映射代碼df2,最后pivot_table在輸出上:
diseases = df2.set_index('Medical Code')['Primary Diagnosis']
(df1
.reset_index()
.melt(id_vars=['index', 'Patient'])
.assign(disease=lambda d: d['value'].map(diseases),
value=1,
)
.pivot_table(index='Patient', columns='disease', values='value', fill_value=0)
)
輸出:
disease AIDS Cardiovescular Disease Diabetes Type 2 HIV Hypertension
Patient
Alex 0 0 1 0 1
John 1 1 1 1 0
Peter 0 1 1 1 0
uj5u.com熱心網友回復:
也許您可以將您的 excel 檔案 2 轉換為某種形式的鍵值對,然后將檔案 1 中的主要診斷列替換為相應的疾病名稱,然后應用某種形式的編碼,例如 one-hot 或類似于檔案 1 的東西。不確定如果這種方法肯定會有所幫助,但只是分享我的想法。
uj5u.com熱心網友回復:
您可以使用merge和pivot_table
out = (
df1.melt('Patient', var_name='Diagnosis', value_name='Medical Code').dropna()
.merge(df2, on='Medical Code').assign(dummy=1)
.pivot_table('dummy', 'Patient', 'Primary Diagnosis', fill_value=0)
.add_prefix('Positive for ').rename_axis(columns=None).reset_index()
)
輸出:
| 病人 | 艾滋病陽性 | 心血管疾病陽性 | 2型糖尿病陽性 | 艾滋病毒陽性 | 高血壓陽性 |
|---|---|---|---|---|---|
| 亞歷克斯 | 0 | 0 | 1 | 0 | 1 |
| 約翰 | 1 | 1 | 1 | 1 | 0 |
| 彼得 | 0 | 1 | 1 | 1 | 0 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/450702.html
標籤:Python 擅长 熊猫 jupyter-笔记本 朱庇特
