As a data enthusiast, you're well aware of the importance of manipulating and analyzing financial data. In this blog post, we'll embark on a journey to calculate portfolio returns using Pandas—a versatile data manipulation library in Python. The challenge involves merging historical stock data for Apple Inc. (AAPL), Microsoft Corporation (MSFT), and Alphabet Inc. (GOOGL), and then computing and visualizing cumulative returns for each stock and the overall portfolio.
Step 1: Importing Libraries
import pandas as pd
import yfinance as yf
import matplotlib.pyplot as plt
Step 2: Downloading and Exploring Data
Let's start by fetching historical stock data for the three companies.
ticker_aapl = "AAPL"
ticker_msft = "MSFT"
ticker_googl = "GOOGL"
data_aapl = yf.download(ticker_aapl, start="2020-01-01", end="2023-01-01")
data_msft = yf.download(ticker_msft, start="2020-01-01", end="2023-01-01")
data_googl = yf.download(ticker_googl, start="2020-01-01", end="2023-01-01")
Step 3: Merging DataFrames
Combine the individual stock data into a single DataFrame.
portfolio_data = pd.merge(data_aapl, data_msft, left_index=True, right_index=True, suffixes=('_AAPL', '_MSFT'))
portfolio_data = pd.merge(portfolio_data, data_googl, left_index=True, right_index=True, suffixes=('', '_GOOGL'))
Step 4: Calculating Returns
Now, let's compute daily and cumulative returns for each stock and the overall portfolio.
portfolio_data['Portfolio_Value'] = (portfolio_data['Close_AAPL'] + portfolio_data['Close_MSFT'] + portfolio_data['Close']) / 3
portfolio_data['Return_AAPL'] = portfolio_data['Close_AAPL'].pct_change()
portfolio_data['Return_MSFT'] = portfolio_data['Close_MSFT'].pct_change()
portfolio_data['Return_GOOGL'] = portfolio_data['Close'].pct_change()
portfolio_data['Return_Portfolio'] = portfolio_data['Portfolio_Value'].pct_change()
portfolio_data['Cumulative_Return_AAPL'] = (1 + portfolio_data['Return_AAPL']).cumprod() - 1
portfolio_data['Cumulative_Return_MSFT'] = (1 + portfolio_data['Return_MSFT']).cumprod() - 1
portfolio_data['Cumulative_Return_GOOGL'] = (1 + portfolio_data['Return_GOOGL']).cumprod() - 1
portfolio_data['Cumulative_Return_Portfolio'] = (1 + portfolio_data['Return_Portfolio']).cumprod() - 1
Step 5: Visualizing the Results
Finally, let's visualize the cumulative returns.
plt.figure(figsize=(12, 6))
plt.plot(portfolio_data.index, portfolio_data['Cumulative_Return_AAPL'], label='AAPL')
plt.plot(portfolio_data.index, portfolio_data['Cumulative_Return_MSFT'], label='MSFT')
plt.plot(portfolio_data.index, portfolio_data['Cumulative_Return_GOOGL'], label='GOOGL')
plt.plot(portfolio_data.index, portfolio_data['Cumulative_Return_Portfolio'], label='Portfolio', linestyle='--', color='black')
plt.title('Cumulative Returns - Portfolio vs Individual Stocks')
plt.xlabel('Date')
plt.ylabel('Cumulative Return')
plt.legend()
plt.show()
Conclusion
Congratulations! You've successfully tackled the challenge of calculating portfolio returns using Pandas. This journey highlights the capabilities of Pandas in handling financial data, merging datasets, and performing complex calculations effortlessly.
Feel free to adapt and expand upon this example to suit your specific needs. Keep exploring the vast world of data analysis with Pandas, and happy coding!
Top comments (0)