Given that I have the following tables (datasets) made by python:
import pandas as pd
dic ={
    "ID":[1,2,3],
    "patient_ID":[100,200,300],
    "Year":[2007,2008,2012],
    "month":[8,6,3]
}
paitent = pd.DataFrame(dic)
So the paitent table is:
ID patient_ID Year month 1 100 2007 8 2 200 2008 6 3 300 2012 3
and then the other table has the same columns patient_ID, Year and the month. These 3 columns are duplicated from patient table.  
dic ={
    "patient_ID":[100,200,100,300],
    "Year":[2007,2008,2007,2012],
    "month":[8,6,8,3],
    "Polyp":[4,5,6,8]
}
paitentPolyp = pd.DataFrame(dic)
So, it is its final look of paitentPolyp
  patient_ID  Year  month  Polyp
         100  2007      8      4
         200  2008      6      5
         100  2007      8      6
         300  2012      3      8
The question is:
How may i obtain a view from paitentPolyp which instead of  patient_ID, Year and the month  only has the ID of paitent?
So, my favorit output is:
  patient_ID  Polyp
           1      4
           2      5
           1      6
           3      8
Although, i am working with python, but a SQL solution is more welcome.
Advertisement
Answer
In Python:
p = paitentPolyp.merge(paitent, on = ['patient_ID', 'Year', 'month'], how = 'left')
p = p.drop(['patient_ID', 'Year', 'month'], axis =1)
p = (p[['ID', 'Polyp']]).sort_values('ID')
In SQL:
CREATE TABLE patient( ID int, patient_id INT, Years INT, months int ); CREATE TABLE patientpoly( patient_id int, Years INT, months INT, polyp int ); INSERT INTO patient VALUES(1, 100, 2007, 8); INSERT INTO patient VALUES(2, 200, 2008, 6); INSERT INTO patient VALUES(3, 300, 2012, 3); INSERT INTO patientpoly VALUES(100, 2007, 8, 4); INSERT INTO patientpoly VALUES(200, 2008, 8, 5); INSERT INTO patientpoly VALUES(100, 2007, 8, 6); INSERT INTO patientpoly VALUES(300, 2012, 8, 8); SELECT patient.ID, patientpoly.polyp FROM patient JOIN patientpoly ON patient.patient_id = patientpoly.patient_id ORDER BY patient.id;
Gives the following output:
ID polyp 1 4 1 6 2 5 3 8