Arhn - архитектура программирования

Объедините два фрейма данных в группу с помощью GroupBy

У меня есть два кадра данных, и мне нужно объединить их на основе даты, но объединение должно выполняться для каждой группы (participant_id) отдельно.

df1: 
   response_date  summary  epis_mark  participant_id
0     2012-01-04      0.0      False              13
1     2012-01-11      0.0      False              13
2     2012-01-19      0.0      False              13
3     2012-01-29      0.0      False              13
4     2012-02-02      0.0      False              13
0     2012-01-02      8.0       True              14
1     2012-01-10      5.0      False              14
2     2012-01-18      2.0      False              14
3     2012-01-24      1.0      False              14
4     2012-01-31      2.0      False              14
0     2012-01-07      4.0      False              17
1     2012-01-11      NaN      False              17
2     2012-01-18      4.0      False              17
3     2012-01-25      NaN      False              17
4     2012-02-01      NaN      False              17



  df2:
   response_date  summary  epis_mark  participant_id
0     2012-01-04     17.0       True              13
1     2012-01-11     18.0       True              13
2     2012-01-19     16.0       True              13
3     2012-01-29     15.0       True              13
4     2012-02-02     15.0       True              13
0     2012-01-02     12.0       True              14
1     2012-01-10      8.0       True              14
2     2012-01-18     21.0       True              14
3     2012-01-24     19.0       True              14
4     2012-01-31     20.0       True              14
0     2012-01-04      NaN      False              17
1     2012-01-11      NaN      False              17
2     2012-01-18      NaN      False              17
3     2012-01-25      NaN      False              17
4     2012-02-01      NaN      False              17

Мне нужно получить один кадр данных (wide), где слияние выполняется на response date для каждого participant_id независимо. Что-то типа:

>> pd.merge(df1[df1.participant_id == i], df2[df2.participant_id == i], on='response_date', how='outer')

Но без перебора i и использования groupby.


Ответы:


1

Объединить оба response_date и participant_id:

In [75]: pd.merge(df1, df2, on=['response_date', 'participant_id'], how='outer')
Out[75]: 
   response_date  summary_x epis_mark_x  participant_id  summary_y epis_mark_y
0     2012-01-04        0.0       False              13       17.0        True
1     2012-01-11        0.0       False              13       18.0        True
2     2012-01-19        0.0       False              13       16.0        True
3     2012-01-29        0.0       False              13       15.0        True
4     2012-02-02        0.0       False              13       15.0        True
5     2012-01-02        8.0        True              14       12.0        True
6     2012-01-10        5.0       False              14        8.0        True
7     2012-01-18        2.0       False              14       21.0        True
8     2012-01-24        1.0       False              14       19.0        True
9     2012-01-31        2.0       False              14       20.0        True
10    2012-01-07        4.0       False              17        NaN         NaN
11    2012-01-11        NaN       False              17        NaN       False
12    2012-01-18        4.0       False              17        NaN       False
13    2012-01-25        NaN       False              17        NaN       False
14    2012-02-01        NaN       False              17        NaN       False
15    2012-01-04        NaN         NaN              17        NaN       False
13.07.2017
  • большое спасибо! Однако следует ли изменить порядок слияния столбцов? Я имею в виду on=['participant_id','response_date'], чтобы гарантировать, что слияние выполняется для каждой группы в первую очередь? 13.07.2017
  • Порядок не имеет значения. Слияние выполняется таким образом, чтобы все ключи обрабатывались на равной основе — не путем группировки по одному ключу перед другим, а вместо этого путем идентификации строк как группы, когда все ключи совпадают. 13.07.2017

  • 2

    Я не совсем уверен, правильно ли я тебя понял.

    Вы можете попробовать следующее:

    pd.merge(df1, df2, on=['response date', 'participant_id'], how='outer')
    
    13.07.2017
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..