Python 使用什么代码交叉引用具有重复值的复杂数据集?

Python 使用什么代码交叉引用具有重复值的复杂数据集?,python,excel,database,pandas,Python,Excel,Database,Pandas,首先,对于非复杂用户提出的复杂问题表示抱歉。 我是一名医学研究人员,试图列出3个月内同时接受过CT扫描和X光检查的人员名单。我有两个excel/csv文档: (1) 是所有接受过CT扫描的人,有四个标题:参考号、日期、患者ID、患者姓名 (2) 是所有接受过X光检查并有四个:XR Ref,Date,Patient ID,Patient ID的人 在这两个优点中,只有参考文献是唯一的值,因为大多数人都有2个以上的研究,并且多个研究在同一天进行 我的目标是打印以下行:患者ID;患者姓名;CT_日期;

首先,对于非复杂用户提出的复杂问题表示抱歉。 我是一名医学研究人员,试图列出3个月内同时接受过CT扫描和X光检查的人员名单。我有两个excel/csv文档:

(1) 是所有接受过CT扫描的人,有四个标题:参考号、日期、患者ID、患者姓名
(2) 是所有接受过X光检查并有四个:XR Ref,Date,Patient ID,Patient ID的人

在这两个优点中,只有参考文献是唯一的值,因为大多数人都有2个以上的研究,并且多个研究在同一天进行

我的目标是打印以下行:患者ID;患者姓名;CT_日期;X光1号;X光2日;。。。X光检查(人们已经接受了多达10次X光检查)。任何关于使用技术的建议,无论多么普遍,都将是非常棒的

多谢各位

数据帧(1)(标题偏移以便于解释)

(二)

预期产量

         Patient_ID    CT_Date     XR1_Date     XR2_Date     XR3_date
0             12345   9/8/2019    9/10/2019     9/6/2018    9/16/2017
1             12346   9/6/2019    
2             12347   9/6/2017    9/10/2016
3             12348   9/6/2016    9/10/2015
4             12348   9/8/2015    9/10/2015

(感谢@sammywemmy为您提供了询问更好问题的建议)

将您的数据帧命名为
df1
nad
df2
使用
merge
groupby

data = df1.merge(df2, left_on='Patient ID', right_on='Patient ID')
data = data.drop(['Ref_CT', 'X-Ray Ref', 'Patient Name_y'], axis=1)
data = data[['Patient ID', 'Patient Name_x', 'CT_Date', 'XR1_Date']]
data = data.groupby(['Patient ID', 'Patient Name_x'])[['CT_Date','XR1_Date']].agg(lambda x: list(set(x.values.tolist())))
输出:

您可以获得没有多列的紧凑数据。希望这是可以接受的输出

                                              CT_Date                           XR1_Date
Patient ID Patient Name_x                                                               
12345      PersonA, Felix (Mr)             [9/8/2019]  [9/10/2017, 9/10/2019, 9/10/2018]
12347      PersonC, Trev (Mrs)             [9/6/2017]                        [9/10/2016]
12348      PersonD, Jeremy (Mr)  [9/6/2016, 9/8/2015]                        [9/10/2015]

请共享一个示例数据框,仅几行和您的预期输出。没有照片,只有数据。以此为指导:不用担心。注意到。。。在您的预期输出中,没有患者id 12346的行,似乎您将该数据与id 12345合并。这背后有什么原因吗?看起来至少有一名患者在x光和ct扫描之间改变了性别?哈哈哈,性别转换发生在我编数据点时,忘记了保持性别一致。我不小心漏掉了12346,因为一旦我可以生成这个数据框,我将使用excel删除没有两次扫描的患者,然后在相互扫描的3个月内过滤扫描。这很容易做到,但这种复杂的交叉引用无法在excel中完成,因此我迅速投入python
data = df1.merge(df2, left_on='Patient ID', right_on='Patient ID')
data = data.drop(['Ref_CT', 'X-Ray Ref', 'Patient Name_y'], axis=1)
data = data[['Patient ID', 'Patient Name_x', 'CT_Date', 'XR1_Date']]
data = data.groupby(['Patient ID', 'Patient Name_x'])[['CT_Date','XR1_Date']].agg(lambda x: list(set(x.values.tolist())))
                                              CT_Date                           XR1_Date
Patient ID Patient Name_x                                                               
12345      PersonA, Felix (Mr)             [9/8/2019]  [9/10/2017, 9/10/2019, 9/10/2018]
12347      PersonC, Trev (Mrs)             [9/6/2017]                        [9/10/2016]
12348      PersonD, Jeremy (Mr)  [9/6/2016, 9/8/2015]                        [9/10/2015]