我對資料集進行資料管理以訓練自己。我有兩張桌子,第一張叫做“Suivi”,第二張叫做“治療”,我想合并接下來的兩張桌子以獲得第三張。
隨表:
| Suvi_id | 會員ID | rhinitis_??symptoms | medicin_id1 | medicin_id2 | medicin_id3 | medicin_id4 | medicin_id5 |
|---|---|---|---|---|---|---|---|
| 3357195 | 85763 | 51 | |||||
| 3357665 | 87339 | 8 | |||||
| 3358237 | 87343 | 17 | |||||
| 3358319 | 87345 | 26 | |||||
| 3358893 | 87343 | 0 | |||||
| 3359371 | 87343 | 0 | |||||
| 3360505 | 87343 | 30 | |||||
| 3362165 | 87345 | 4 | |||||
| 3362607 | 87343 | 0 | |||||
| 3362613 | 87505 | 64 |
治療 :
| 治療 ID | suivi_data_id | 藥名 |
|---|---|---|
| 927231 | 3357195 | 7501 |
| 927765 | 3357665 | 7489 |
| 928423 | 3358237 | 7489 |
| 928425 | 3358237 | 7501 |
| 928427 | 3358237 | 7623 |
| 928539 | 3358319 | 7489 |
| 929173 | 3358893 | 7489 |
| 929741 | 3359371 | 7489 |
| 931089 | 3360505 | 7489 |
| 932937 | 3362165 | 7489 |
| 933381 | 3362607 | 7569 |
| 933383 | 3362607 | 7645 |
| 933385 | 3362607 | 7789 |
| 933387 | 3362607 | 19159 |
| 933393 | 3362613 | 7569 |
| 933395 | 3362613 | 7605 |
| 933397 | 3362613 | 7645 |
| 933399 | 3362613 | 7789 |
| 933401 | 3362613 | 19159 |
通緝表:
| Suvi_id | 會員ID | rhinitis_??symptoms | medicin_id1 | medicin_id2 | medicin_id3 | medicin_id4 | medicin_id5 |
|---|---|---|---|---|---|---|---|
| 3357195 | 85763 | 51 | 7501 | ||||
| 3357665 | 87339 | 8 | 7489 | ||||
| 3358237 | 87343 | 17 | 7489 | 7501 | 7623 | ||
| 3358319 | 87345 | 26 | 7489 | ||||
| 3358893 | 87343 | 0 | 7489 | ||||
| 3359371 | 87343 | 0 | 7489 | ||||
| 3360505 | 87343 | 30 | 7489 | ||||
| 3362165 | 87345 | 4 | 7489 | ||||
| 3362607 | 87343 | 0 | 7569 | 7645 | 7789 | 19159 | |
| 3362613 | 87505 | 64 | 7569 | 7605 | 7645 | 7789 | 19159 |
有沒有辦法在 sql 中(在訪問中?!)或通過在 R 或 python 中執行函式。
提前致謝
uj5u.com熱心網友回復:
你正在尋找的是一個加入。
就像是:
SELECT suivi.Suivi_id, suivi.member_id, treatment.medicin_id ...
FROM suivi
JOIN treatment ON suivi.Suivi_id = treatment.suivi_data_id
uj5u.com熱心網友回復:
我知道兩種方法。使用樞軸函式(https://learn.microsoft.com/de-de/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-ver16)或對您的資料進行排名使用 mssql 中的 ROW_NUMMBER() 函式。(其他 dbs 應該有類似的功能。)也可以寫一些動態的東西,但這里是 staitc 版本:
WITH TreatementRowNumber as (
SELECT
ROW_NUMBER() OVER (PARTITION BY [suivi_data_id] ORDER BY [suivi_data_id]) RowNumber
, suivi_data_id
, medicin_id
FROM Treatement
)
Select
[Suivi_id]
, [member_id]
, [rhinitis_symptoms]
, (SELECT Medicin_id FROM TreatementRowNumber WHERE Suivi.Suivi_id = TreatementRowNumber.suivi_data_id AND RowNumber = 1) medicin_id1
, (SELECT Medicin_id FROM TreatementRowNumber WHERE Suivi.Suivi_id = TreatementRowNumber.suivi_data_id AND RowNumber = 2) medicin_id2
, (SELECT Medicin_id FROM TreatementRowNumber WHERE Suivi.Suivi_id = TreatementRowNumber.suivi_data_id AND RowNumber = 3) medicin_id3
, (SELECT Medicin_id FROM TreatementRowNumber WHERE Suivi.Suivi_id = TreatementRowNumber.suivi_data_id AND RowNumber = 4) medicin_id4
, (SELECT Medicin_id FROM TreatementRowNumber WHERE Suivi.Suivi_id = TreatementRowNumber.suivi_data_id AND RowNumber = 5) medicin_id5
FROM Suivi
uj5u.com熱心網友回復:
使用熊貓的 Python 解決方案:
在這里,我pandas merge function用來連接兩個表,即Suivi_Table和Treatment_Table。Renaming接下來,將兩個表列的相似列標識suivi_data_id為Suivi_id,。接下來提到[[]]我想從處理表中選擇的列名。
import pandas as pd
pd.merge(Suivi_Table, Treatment_Table.rename(columns = {'suivi_data_id':'Suivi_id'})[['Suivi_id','medicin_id']], on="Suivi_id")
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/514551.html
