Properly Formatting Pandas Display - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: Data Science (https://python-forum.io/forum-44.html) +--- Thread: Properly Formatting Pandas Display (/thread-25546.html) |
Properly Formatting Pandas Display - eagle - Apr-02-2020 Hello everyone! I please need your help. I get: Date 2014-01-02 2014-01-03 ... 2017-12-28 2017-12-29 GOOG 0.0 0.0 ... 0.000000 0.000000 positions 0.0 0.0 ... 0.000000 0.000000 cash NaN 10000.0 ... 10253.277405 10253.277405 total NaN 10000.0 ... 10253.277405 10253.277405 after running my code: from pandas_datareader import data import numpy as np import pandas as pd start_date = '2014-01-01' end_date = '2018-01-01' data_values = data.DataReader('GOOG', 'yahoo', start_date, end_date) dict_result = pd.DataFrame({"Date": [], "Port. Start Value": [], "Entry & Price Paid": [], "Profit": []}) data_signal = pd.DataFrame(index=data_values.index) data_signal['price'] = data_values['Adj Close'] data_signal['daily_difference'] = data_signal['price'].diff() data_signal['signal'] = 0.0 data_signal['signal'][:] = np.where(data_signal['daily_difference'][:] > 0, 1.0, 0.0) data_signal['positions'] = data_signal['signal'].diff() # Set the initial capital initial_capital= float(10000.0) positions = pd.DataFrame(index=data_signal.index).fillna(0.0) portfolio = pd.DataFrame(index=data_signal.index).fillna(0.0) positions['GOOG'] = data_signal['signal'] portfolio['positions'] = (positions.multiply(data_signal['price'], axis=0)) portfolio['cash'] = initial_capital - (positions.diff().multiply(data_signal['price'], axis=0)).cumsum() portfolio['total'] = portfolio['positions'] + portfolio['cash'] values = [positions['GOOG'], portfolio['positions'], portfolio['cash'], portfolio['total']] backtest = pd.DataFrame(values) print(backtest)But what i want to do is passing values in dict_result = pd.DataFrame({"Date": [], "Port. Start Value": [], "Entry & Price Paid": [], "Profit": []})of my code. Thank you for your help. These are the values I'm trying to display in 'dict_result'(individual print out of positions['GOOG'], portfolio['positions'], portfolio['cash']and portfolio['total']shown below): 2014-01-02 0.0 2014-01-03 0.0 2014-01-06 1.0 2014-01-07 1.0 2014-01-08 1.0 ... 2017-12-22 0.0 2017-12-26 0.0 2017-12-27 0.0 2017-12-28 0.0 2017-12-29 0.0 Name: GOOG, Length: 1007, dtype: float64, Date 2014-01-02 0.000000 2014-01-03 0.000000 2014-01-06 556.573853 2014-01-07 567.303589 2014-01-08 568.484192 ... 2017-12-22 0.000000 2017-12-26 0.000000 2017-12-27 0.000000 2017-12-28 0.000000 2017-12-29 0.000000 Name: positions, Length: 1007, dtype: float64, Date 2014-01-02 NaN 2014-01-03 10000.000000 2014-01-06 9443.426147 2014-01-07 9443.426147 2014-01-08 9443.426147 ... 2017-12-22 10253.277405 2017-12-26 10253.277405 2017-12-27 10253.277405 2017-12-28 10253.277405 2017-12-29 10253.277405 Name: cash, Length: 1007, dtype: float64, Date 2014-01-02 NaN 2014-01-03 10000.000000 2014-01-06 10000.000000 2014-01-07 10010.729736 2014-01-08 10011.910339 ... 2017-12-22 10253.277405 2017-12-26 10253.277405 2017-12-27 10253.277405 2017-12-28 10253.277405 2017-12-29 10253.277405 Name: total, Length: 1007, dtype: float64] RE: Properly Formatting Pandas Display - eagle - Apr-02-2020 Hi All! I got the solution to my problem, it amounted to directly passing values obtained in positions['GOOG'], portfolio['positions'], portfolio['cash'] and portfolio['total']directly to the data frame as follows (with a renaming of the columns): backtest_result = pd.DataFrame({"Signal": positions['GOOG'], "Price Paid": portfolio['positions'], "Position Value": portfolio['cash'], "PnL": portfolio['total']})Reworked -and working- version of code: from pandas_datareader import data import numpy as np import pandas as pd start_date = '2014-01-01' end_date = '2018-01-01' data_values = data.DataReader('GOOG', 'yahoo', start_date, end_date) data_signal = pd.DataFrame(index=data_values.index) data_signal['price'] = data_values['Adj Close'] data_signal['daily_difference'] = data_signal['price'].diff() data_signal['signal'] = 0.0 data_signal['signal'][:] = np.where(data_signal['daily_difference'][:] > 0, 1.0, 0.0) data_signal['positions'] = data_signal['signal'].diff() # Set the initial capital initial_capital= float(10000.0) positions = pd.DataFrame(index=data_signal.index).fillna(0.0) portfolio = pd.DataFrame(index=data_signal.index).fillna(0.0) positions['GOOG'] = data_signal['signal'] portfolio['positions'] = (positions.multiply(data_signal['price'], axis=0)) portfolio['cash'] = initial_capital - (positions.diff().multiply(data_signal['price'], axis=0)).cumsum() portfolio['total'] = portfolio['positions'] + portfolio['cash'] pd.set_option("display.max_rows", None, "display.max_columns", None) backtest_result = pd.DataFrame({"Signal": positions['GOOG'], "Price Paid": portfolio['positions'], "Position Value": portfolio['cash'], "PnL": portfolio['total']}) print(backtest_result) RE: Properly Formatting Pandas Display - j.crater - Apr-03-2020 Glad you figured it out, and thank you for coming back to post the solution. |