34 lines
No EOL
1.1 KiB
Python
34 lines
No EOL
1.1 KiB
Python
import os
|
|
import pandas as pd
|
|
import numpy as np
|
|
from scraper.top100_extractor import programming_crime_list
|
|
from typing import Optional
|
|
from backend.api.eps import ticker_quarter_list
|
|
from dateutil.parser import isoparse
|
|
|
|
DF_EPS_PATH: str = os.path.join(os.path.dirname(__file__), '..', '..', 'Elaborated_Data', 'eps_comparison.csv')
|
|
|
|
|
|
def get_eps_comp(tickers: list[str]) -> list[dict]:
|
|
df = pd.read_csv(DF_EPS_PATH)
|
|
ticker_series = pd.Series(tickers)
|
|
|
|
df = df.loc[df['Ticker'].isin(ticker_series), :] \
|
|
.rename(columns={"epsDifferential": "quarterlyDifferential", "Ticker": "ticker"}) \
|
|
.reset_index(drop=True)
|
|
|
|
qmap = dict([ \
|
|
[ticker, ticker_quarter_list(df.loc[df.ticker == ticker, 'quarter'])] \
|
|
for ticker in tickers \
|
|
])
|
|
|
|
def get_quart(x):
|
|
date = isoparse(x.quarter)
|
|
quarter = qmap[x.ticker].index(date.month) + 1
|
|
return f"{date.year}-Q{quarter}"
|
|
|
|
df['quarter'] = df.apply(get_quart, axis=1)
|
|
|
|
|
|
df = df.pivot(index='quarter', columns='ticker', values='quarterlyDifferential').reset_index(drop=False)
|
|
return df.replace({ np.nan: None }).to_dict('records') |