Какой код использовать для перекрестной ссылки на сложный набор данных с повторяющимися значениями? - PullRequest
0 голосов
/ 10 февраля 2020

Во-первых, извините за сложный вопрос от несложного пользователя. Я - медицинский исследователь, пытающийся составить список людей, у которых было и КТ и рентген в течение 3 месяцев. У меня есть два документа excel / csv:

(1) - это все люди, которые прошли компьютерную томографию и имеют четыре заголовка: Ref_CT, Date_CT, ID пациента_CT, Имя пациента_CT;
(2) - все люди у кого был рентген и четыре: рентгенография, дата, идентификатор пациента, идентификатор пациента.

В обоих этих исключениях только ссылки являются уникальными значениями, так как у большинства людей есть 2+ исследования, и несколько исследований происходят в одну и ту же дату.

Моя цель - напечатать строки: ID пациента; Имя пациента; CT_Date; Xray_1_Date; Xray_2_Date; ... Xray_10_Date (у людей было до 10 рентгеновских снимков). Любой совет по использованию техники, пусть и общий, будет фантастическим c.

Огромное спасибо

Фреймы данных (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, за совет по более интересному вопросу)

1 Ответ

0 голосов
/ 10 февраля 2020

Для именования ваших фреймов данных как 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...