Группа Панд до внешнего Присоединения - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть две таблицы в следующих форматах:

Таблица1: ключ = Дата, индекс

    Date      Index  Value1
0   2015-01-01  A   -1.292040
1   2015-04-01  A   0.535893
2   2015-02-01  B   -1.779029
3   2015-06-01  B   1.129317   

Таблица2: Ключ = Дата

    Date        Value2
0   2015-01-01  2.637761
1   2015-02-01  -0.496927
2   2015-03-01  0.226914
3   2015-04-01  -2.010917
4   2015-05-01  -1.095533
5   2015-06-01  0.651244
6   2015-07-01  0.036592
7   2015-08-01  0.509352
8   2015-09-01  -0.682297
9   2015-10-01  1.231889
10  2015-11-01  -1.557481
11  2015-12-01  0.332942

Таблица2 имеетбольше строк, и я хочу присоединить Table1 к Table2 в Date, чтобы я мог что-то делать со значениями.Тем не менее, я также хочу ввести Index и заполнить для каждого индекса все даты, которых у них нет:

Результат:

    Date    Index   Value1      Value2
0   2015-01-01  A   -1.292040   2.637761
1   2015-02-01  A   NaN         -0.496927
2   2015-03-01  A   NaN         0.226914
3   2015-04-01  A   0.535893    -2.010917
4   2015-05-01  A   NaN         -1.095533
5   2015-06-01  A   NaN         0.651244
6   2015-07-01  A   NaN         0.036592
7   2015-08-01  A   NaN         0.509352
8   2015-09-01  A   NaN         -0.682297
9   2015-10-01  A   NaN         1.231889
10  2015-11-01  A   NaN         -1.557481
11  2015-12-01  A   NaN         0.332942
.... and so on with Index B 

Полагаю, я мог бы вручнуюотфильтровывать каждое значение индекса из таблицы 1 в таблицу 2, но это было бы очень утомительно и хлопотно, если бы я на самом деле не знал все индексы.По сути, я хочу создать «Группу таблиц 1 по индексу и объединить права в таблицу 2 по дате» одновременно, но я застрял в том, как это выразить.

Запуск последних версий Pandas и Jupyter.

РЕДАКТИРОВАТЬ: У меня есть программа для заполнения NaN, так что они не проблема сейчас.

1 Ответ

0 голосов
/ 18 сентября 2018

Кажется, вы хотите объединить 'Value1' из df1 с df2 на 'Date', назначая индекс каждой дате.Вы можете использовать pd.concat с пониманием списка

import pandas as pd

pd.concat([df2.assign(Index=i).merge(gp, how='left') for i, gp in df1.groupby('Index')],
          ignore_index=True)

Вывод:

          Date    Value2 Index    Value1
0   2015-01-01  2.637761     A -1.292040
1   2015-02-01 -0.496927     A       NaN
2   2015-03-01  0.226914     A       NaN
3   2015-04-01 -2.010917     A  0.535893
4   2015-05-01 -1.095533     A       NaN
5   2015-06-01  0.651244     A       NaN
6   2015-07-01  0.036592     A       NaN
7   2015-08-01  0.509352     A       NaN
8   2015-09-01 -0.682297     A       NaN
9   2015-10-01  1.231889     A       NaN
10  2015-11-01 -1.557481     A       NaN
11  2015-12-01  0.332942     A       NaN
12  2015-01-01  2.637761     B       NaN
13  2015-02-01 -0.496927     B -1.779029
14  2015-03-01  0.226914     B       NaN
15  2015-04-01 -2.010917     B       NaN
16  2015-05-01 -1.095533     B       NaN
17  2015-06-01  0.651244     B  1.129317
18  2015-07-01  0.036592     B       NaN
19  2015-08-01  0.509352     B       NaN
20  2015-09-01 -0.682297     B       NaN
21  2015-10-01  1.231889     B       NaN
22  2015-11-01 -1.557481     B       NaN
23  2015-12-01  0.332942     B       NaN

Не задавая ключи объединения, он автоматически использует пересечение столбцов, равное ['Date', 'Index']для каждой группы.

...