Melt многоиндексный dataframe python - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь

Данные выглядят следующим образом:

Attributes  Adj Close       Close           High            Low             Open            Volume
Symbols     AAPL    ACN     AAPL    ACN     AAPL    ACN     AAPL    ACN     AAPL    ACN     AAPL    ACN
Date                                                
2002-01-02  1.444668    19.703959   1.664286    26.209999   1.664286    26.910000   1.568571    25.950001   1.575000    26.900000   132374200.0     900500.0
2002-01-03  1.462029    19.087507   1.684286    25.389999   1.696429    26.270000   1.626429    25.299999   1.642857    26.230000   153001800.0     698200.0
2002-01-04  1.468849    20.824106   1.692143    27.700001   1.710714    28.200001   1.642143    25.240000   1.667143    25.389999   102494000.0     2708500.0

Я пытался использовать melt, но каким-то образом я могу заставить его работать только с одним столбцом Adj Close:

    Date    Ticker     Adj Close 
0   2002-01-02  AAPL    1.444668
1   2002-01-03  AAPL    1.462029
2   2002-01-04  AAPL    1.468849
3   2002-01-07  AAPL    1.419867
4   2002-01-08  AAPL    1.401886

код:

df = pd.melt(df_market_data['Adj Close'].reset_index(), id_vars='Date', value_name='Adj Close', var_name='minor').rename(columns={'minor': 'Ticker'})

При попытке сделать это со всеми из них:

Adj Close       Close           High            Low             Open            Volume

не работает:

df = pd.melt(df_market_data.reset_index(), id_vars='Date', value_name=['Open', 'High', 'Low', 'Close', 'Adj Close', 'Volume'], var_name='minor').rename(columns={'minor': 'Ticker'})

Код выглядит следующим образом:

import pandas as pd
import pandas_datareader.data as pdr
import datetime as dt

ticker_list = ['AAPL','ACN']

start_date = dt.datetime(2002,1,1).date()
end_date = dt.datetime.now().date() - dt.timedelta(days=1)

df_market_data = pdr.DataReader(ticker_list, 'yahoo', start_date, end_date)

df = pd.melt(df_market_data['Adj Close'].reset_index(), id_vars='Date', value_name='Adj Close', var_name='minor').rename(columns={'minor': 'Ticker'})

1 Ответ

0 голосов
/ 25 марта 2020

Функция stack () используется для укладки заданных уровней из столбцов в индекс. Здесь индекс на первом уровне использовался для получения правильного вывода и вывода выделенного информационного кадра

df = df_market_data.stack(level = 1).reset_index(level = [0, 1], drop = False).reset_index()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...