Объединить DataFrame с многоиндексными столбцами - PullRequest
1 голос
/ 16 марта 2019

Я загрузил данные из разных источников в рамки данных и хотел бы объединить их в один окончательный вариант DataFrame. Давайте проиллюстрируем это на следующем примере:

фрейм данных 1 (уже многоиндексированные столбцы)

index    stockA        stockB      ...
        O  L  H  C    O  L  H  C
1/1/19  10 15 20 17  35 30 39 37
2/1/19  ...          ...
...

фрейм данных 2 (не многоиндексированные столбцы)

index    stockA  stockB     
1/1/19    1.5     3.2 
2/1/19    ...     ...
...

Я хотел бы объединить оба фрейма данных и присвоить имя столбца данным в фрейме данных. Дата индекса может быть не одинаковой в обоих данных, поэтому мне может потребоваться выполнить внутреннее слияние.

Ожидаемые результаты (многоиндексированные столбцы)

index    stockA                 stockB             ...
        O  L  H  C new_col    O  L  H  C  new_col
1/1/19  10 15 20 17 1.5       35 30 39 37  3.2
2/1/19       ...                     ...
...

1 Ответ

0 голосов
/ 16 марта 2019

Использование:

print (df1)
       stockA             stockB            
            O   L   H   C      O   L   H   C
1/1/19     10  15  20  17     35  30  39  37
2/1/19     12  13  26  27     31  50  29  17

print (df2)
        stockA  stockB
2/1/19     1.5     3.2
3/1/19     1.2     6.2

Преобразование индекса в оба значения index в datetime с, если необходимо:

df1.index = pd.to_datetime(df1.index, format='%d/%m/%y')
df2.index = pd.to_datetime(df2.index, format='%d/%m/%y')

Получить одинаковые значения в обоих индексах по Index.intersection:

idx = df1.index.intersection(df2.index)
print (idx)
DatetimeIndex(['2019-01-02'], dtype='datetime64[ns]', freq=None)

Создать MultiIndex в MultiIndex.from_product в df2:

df2.columns = pd.MultiIndex.from_product([df2.columns, ['new']])
print (df2)
           stockA stockB
              new    new
2019-01-02    1.5    3.2
2019-01-03    1.2    6.2

Фильтрация обоих фреймов данных по DataFrame.loc, объединение по DataFrame.join и последняя сортировка MultiIndex по DataFrame.sort_index:

df = df1.loc[idx].join(df2.loc[idx]).sort_index(level=0, axis=1)
print (df)
           stockA                  stockB                 
                C   H   L   O  new      C   H   L   O  new
2019-01-02     27  26  13  12  1.5     17  29  50  31  3.2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...