#python #pandas #dataframe #time-series
Вопрос:
Я работаю с фреймом данных Pandas, содержащим 20-летнюю выборку ежемесячных цен на акции и соответствующие доходы по сотням различных акций. После сортировки образец ‘дата’ и ‘книга-к-Маркет’ (‘в/М’, для краткости), я хочу создать столбец, который присваивает значение от -1 до доходностей акций компаний с низкой Б/М и стоимостью от 1 до доходностей акций компаний с самым высоким Б/М (половина выборки присваивается -1, а другая половина назначается 1) за каждый месяц в образце.
Я попытался создать фреймы данных для каждого месяца в образце и приписать им значения, но нашел это непрактичным. Пожалуйста, найдите код ниже:
df = df.sort_values (by = ['Date','B/M'], ascending = True)
df
# Example of desired outcome (Note: 'Date' - dtype='datetime64[ns] - has been set as the index).
Date Company Name B/M Monthly Return Signal
|2000-01-31 | ORACLE | 0.29 | 0.048 | -1 |
|2000-01-31 | MICROSOFT | 0.37 | 0.032 | 1 |
|... |... |... |... |... |
|2000-02-29 | MICROSOFT | 0.08 | 0.016 | -1 |
|2000-02-29 | ORACLE | 0.30 | -0.07 | 1 |
Спасибо, что уделили мне время.
Комментарии:
1. Возможно, вы могли бы вычислить промежуточное значение среднего
B/M
значения за данный месяц. А затем создайтеSignal
столбец, содержащий это среднее значение.
Ответ №1:
Хорошо, пожалуйста, сначала рассчитайте медиану B/M
bm_median=df["B/M"].median()
Затем создайте столбец, в котором вы проверяете, меньше ли B/M, чем медиана
df["signal"]=df["B/M"]<bm_median
Затем, если false, замените на 1, а если true, замените на -1
df["signal"].replace(False,1,inplace=True)
df["signal"].replace(True,-1,inplace=True)