Added Stock Tickers to Email
This commit is contained in:
@@ -76,12 +76,20 @@ if 'shrsOrPrnAmt' in latest_df.columns:
|
|||||||
latest_df['shrsOrPrnAmt'] = latest_df['shrsOrPrnAmt'].apply(extract_shares)
|
latest_df['shrsOrPrnAmt'] = latest_df['shrsOrPrnAmt'].apply(extract_shares)
|
||||||
prev_df['shrsOrPrnAmt'] = prev_df['shrsOrPrnAmt'].apply(extract_shares)
|
prev_df['shrsOrPrnAmt'] = prev_df['shrsOrPrnAmt'].apply(extract_shares)
|
||||||
|
|
||||||
# Verify required columns
|
# Verify required columns (ticker is optional but we'll add it if present)
|
||||||
required_cols = ['cusip', 'nameOfIssuer', 'shrsOrPrnAmt', 'value']
|
required_cols = ['cusip', 'nameOfIssuer', 'shrsOrPrnAmt', 'value']
|
||||||
for col in required_cols:
|
for col in required_cols:
|
||||||
if col not in latest_df.columns or col not in prev_df.columns:
|
if col not in latest_df.columns or col not in prev_df.columns:
|
||||||
raise KeyError(f"Column {col} missing in holdings data")
|
raise KeyError(f"Column {col} missing in holdings data")
|
||||||
|
|
||||||
|
# Add ticker column if present
|
||||||
|
if 'ticker' in latest_df.columns:
|
||||||
|
latest_df['ticker'] = latest_df['ticker'].fillna('N/A')
|
||||||
|
prev_df['ticker'] = prev_df['ticker'].fillna('N/A')
|
||||||
|
else:
|
||||||
|
latest_df['ticker'] = 'N/A'
|
||||||
|
prev_df['ticker'] = 'N/A'
|
||||||
|
|
||||||
# Format value with commas and dollar sign
|
# Format value with commas and dollar sign
|
||||||
latest_df['value_formatted'] = latest_df['value'].apply(lambda x: f"${x:,.0f}")
|
latest_df['value_formatted'] = latest_df['value'].apply(lambda x: f"${x:,.0f}")
|
||||||
prev_df['value_formatted'] = prev_df['value'].apply(lambda x: f"${x:,.0f}")
|
prev_df['value_formatted'] = prev_df['value'].apply(lambda x: f"${x:,.0f}")
|
||||||
@@ -106,6 +114,11 @@ changes['share_change'] = changes['shrsOrPrnAmt_new'] - changes['shrsOrPrnAmt_ol
|
|||||||
changes = changes[changes['share_change'].notna()]
|
changes = changes[changes['share_change'].notna()]
|
||||||
changes = changes[abs(changes['share_change']) / changes['shrsOrPrnAmt_old'].replace(0, 1) > 0.1]
|
changes = changes[abs(changes['share_change']) / changes['shrsOrPrnAmt_old'].replace(0, 1) > 0.1]
|
||||||
changes['share_change'] = changes['share_change'].apply(lambda x: f"{x:,.0f}")
|
changes['share_change'] = changes['share_change'].apply(lambda x: f"{x:,.0f}")
|
||||||
|
# Add ticker_new for changes
|
||||||
|
if 'ticker' in changes.columns:
|
||||||
|
changes['ticker_new'] = changes['ticker_new'].fillna('N/A')
|
||||||
|
else:
|
||||||
|
changes['ticker_new'] = 'N/A'
|
||||||
|
|
||||||
# HTML table styling
|
# HTML table styling
|
||||||
html_style = """
|
html_style = """
|
||||||
@@ -142,9 +155,9 @@ summary = f"""
|
|||||||
<head>{html_style}</head>
|
<head>{html_style}</head>
|
||||||
<body>
|
<body>
|
||||||
<h2>Point72 13F Changes {prev['periodOfReport']} to {latest['periodOfReport']}</h2>
|
<h2>Point72 13F Changes {prev['periodOfReport']} to {latest['periodOfReport']}</h2>
|
||||||
{df_to_html(additions, ['nameOfIssuer', 'shrsOrPrnAmt', 'value_formatted'], 'Additions')}
|
{df_to_html(additions, ['nameOfIssuer', 'ticker', 'shrsOrPrnAmt', 'value_formatted'], 'Additions')}
|
||||||
{df_to_html(removals, ['nameOfIssuer', 'shrsOrPrnAmt', 'value_formatted'], 'Removals')}
|
{df_to_html(removals, ['nameOfIssuer', 'ticker', 'shrsOrPrnAmt', 'value_formatted'], 'Removals')}
|
||||||
{df_to_html(changes, ['nameOfIssuer_new', 'share_change'], 'Changes')}
|
{df_to_html(changes, ['nameOfIssuer_new', 'ticker_new', 'share_change'], 'Changes')}
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
"""
|
"""
|
||||||
|
|||||||
Reference in New Issue
Block a user