【问题标题】:What code to use to cross-reference complex data-set with repeated values?使用什么代码来交叉引用具有重复值的复杂数据集?
【发布时间】:2020-05-25 10:41:56
【问题描述】:

首先,对于非复杂用户提出的复杂问题,我们深表歉意。 我是一名医学研究人员,试图创建一份在 3 个月内同时进行过 CT 扫描和 X 光检查的人员名单。我有两个 excel/csv 文档:

(1) 是所有做过 CT 扫描的人,有四个标题:Ref_CT、Date_CT、Patient ID_CT、Patient Name_CT;
(2) 是所有接受过 X 光检查的人,有四个:XR Ref、Date、Patient ID、Patient ID。

在这两个 Excel 中,只有参考文献具有独特的价值,因为大多数人都有 2 次以上的研究,并且多个研究发生在同一日期。

我的目标是打印以下行: 患者 ID;患者姓名; CT_日期; Xray_1_Date; Xray_2_Date;... Xray_10_Date(人们有多达 10 次 X 射线)。任何关于使用技术的建议,无论多么笼统,都会很棒。

非常感谢

Dataframes (1) (标题偏移以便于解释)

       Ref_CT    Date_CT     Patient ID_C               Patient Name_CT
0           1   9/8/2019          12345             PersonA, Felix (Mr)
1           2   9/6/2018          12346            PersonB, Anthony(Mr)
2           3   9/6/2017          12347             PersonC, Trev (Mrs)
3           4   9/6/2016          12348            PersonD, Jeremy (Mr)
4           5   9/8/2015          12348            PersonD, Jeremy (Mr)

(2)

          X-Ray Ref        Date     Patient ID                 Patient Name
0                 1   9/10/2019       12345             PersonA, Felix (Mr)
1                 2   9/10/2018       12345             PersonA, Felix (Mr)
2                 3   9/10/2017       12345             PersonA, Felix (Mr)
3                 4   9/10/2016       12347             PersonC, Trev (Mrs)
4                 5   9/10/2015       12348            PersonD, Jeremy (Mr)

预期输出

         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 为提出更好的问题提供建议)

【问题讨论】:

  • 请分享一个示例数据框,只有几行和您的预期输出。没有图片,只有数据。以此为指导:stackoverflow.com/questions/20109391/…
  • 不用担心。注意到了一些事情......在您的预期输出中,没有患者 id 12346 的行,您似乎将该数据与 id 12345 混为一谈。这背后有什么原因吗?
  • 看起来至少有一名患者在 X 光和 CT 扫描之间改变了性别?
  • 哈哈哈,性别转换发生在我制作数据点并忘记保持性别一致时。而且我不小心遗漏了 12346,因为一旦我可以生成这个数据框,我将使用 excel 删除没有两次扫描的患者,然后在彼此的 3 个月内过滤扫描。这一切都相当容易做到,但是这种复杂的交叉引用无法在 excel 中完成,因此我为什么要快速投入 python

标签: python excel database pandas


【解决方案1】:

要将数据框命名为df1 nad df2,请使用mergegroupby

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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 2011-12-27
    • 2018-03-06
    相关资源
    最近更新 更多