Решение 1
Я не совсем уверен, что у вас еще есть, но я попытался придумать это в качестве отправной точки. Он использует Yahoo Finance API для моделирования цен ваших акций. Он определяет две функции: одна принимает один символ компании и получает текущую рыночную цену этой компании, а другая обобщает ее на фрейм данных, применяя ее ко всем значениям столбца символов.
from datetime import datetime
def get_market_price(symb):
try:
comp_info = yf.Ticker(symb)
return comp_info.info['regularMarketPrice']
except Exception:
return np.nan
def fetch_today(df):
today = datetime.today().date().strftime('%Y-%m-%d')
df[today] = df['Companies'].apply(get_market_price)
return df
Вот несколько примеров данных и применение вышеуказанных функций.
df = pd.DataFrame({
'Companies': ['XOM', 'GE', 'MSFT', 'BP', 'C', 'PG']
})
df = fetch_today(df)
print(df)
Вывод
Companies 2020-05-25
0 XOM NaN
1 GE 6.48
2 MSFT 183.19
3 BP 22.98
4 C NaN
5 PG 112.29
В этом примере вы должны прочитать свои данные каждый день с pd.read_csv
, применяйте fetch_today
, а затем сохраняйте этот новый фрейм данных с pd.to_csv
. Каждый раз, когда вы запускаете его в новый день, он добавляет столбец с заголовком текущей даты с новыми данными.
Решение 2
Если ваши данные представляют собой просто список компаний, и вы хотите запустить этот сценарий только один раз и получить данные в определенном диапазоне, что-то вроде этого может сработать.
def get_closing_values(symb):
comp_info = yf.download(symb, start='2020-5-12', end='2020-5-21')
s = comp_info['Close']
s.name = symb
return s.to_frame().T
companies = ['XOM', 'GE', 'MSFT', 'BP', 'C', 'PG']
df = pd.concat([get_closing_values(comp) for comp in companies])
print(df)
Date 2020-05-11 2020-05-12 2020-05-13 2020-05-14 2020-05-15 2020-05-18
XOM 45.740002 44.119999 41.930000 42.299999 42.000000 45.340000
GE 6.190000 6.000000 5.790000 5.700000 5.490000 6.270000
MSFT 186.740005 182.509995 179.750000 180.529999 183.160004 184.910004
BP 23.500000 23.059999 22.230000 22.139999 21.820000 23.510000
C 44.070000 42.349998 40.599998 42.060001 41.919998 45.669998
PG 115.309998 114.550003 113.919998 113.809998 114.610001 116.209999