Формат вывода фрейма данных Pandas

#python #pandas

#python #pandas

Вопрос:

Мне нужна помощь в переформатировании моего вывода фрейма данных для цен закрытия акций.

В настоящее время мой вывод содержит стандартные символы в качестве заголовков, где я хотел бы, чтобы они отображались в строках. df_output = 1: https://i.stack.imgur.com/u4jEk.png

Я хотел бы, чтобы он отображался как показано ниже:

Результаты

Это мой текущий код df_output (не уверен, что это причина):

 prices_df = pd.DataFrame({
    a: {x['formatted_date']: x['adjclose'] for x in data[a]['prices']} for a in assets})
  

excel_list

ПОЛНЫЙ КОД:

 import pandas as pd
import numpy as np
import yfinance as yf
from yahoofinancials import YahooFinancials
from datetime import datetime
import time
start_time = time.time()

df = pd.read_excel(r'C:UsersRyanDesktopStock Portfolio\My Portfolio.xlsx', sheet_name=0, skiprows=2)


list1 = list(df['Stock Code']) 

assets = list1

yahoo_financials = YahooFinancials(assets)

data = yahoo_financials.get_historical_price_data(start_date=str(datetime.now().date().replace(month=1, day=1)), 
                                                  end_date=str(datetime.now().date().replace(month=12, day=31)), 
                                                  time_interval='daily')

prices_df = pd.DataFrame({
    a: {x['formatted_date']: x['adjclose'] for x in data[a]['prices']} for a in assets})
  

Комментарии:

1. вы заглянули в stack() / unstack() ? очень сложно воспроизвести ваш случай без доступа к вашему Excel …. включите подмножество list1

2. Я сейчас не за компьютером, но я считаю, что prices_df.stack() (как сказал Роб) должно сработать.

Ответ №1:

Проверьте функции pandas, такие какhttps://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.wide_to_long.html и https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas .DataFrame.pivot_table.html для операций преобразования между длинным и широким форматами.

Ответ №2:

Попробуйте это:

 prices_df.rename_axis('Date').reset_index().melt('Date', var_name='Symbol', value_name='Price')
  

Вывод:

            Date Symbol       Price
0    2020-01-02     FB  209.779999
1    2020-01-03     FB  208.669998
2    2020-01-06     FB  212.600006
3    2020-01-07     FB  213.059998
4    2020-01-08     FB  215.220001
..          ...    ...         ...
973  2020-08-18   CDNS  109.150002
974  2020-08-19   CDNS  108.529999
975  2020-08-20   CDNS  111.260002
976  2020-08-21   CDNS  110.570000
977  2020-08-24   CDNS  111.260002

[978 rows x 3 columns]
  

Комментарии:

1. Куда мне ввести эту строку? По-прежнему выдается ошибка

2. В самом конце вашего кода. Вам нужно будет переназначить это в новую переменную. Какую ошибку вы получаете?