我正在处理一个Pandas DataFrame,该DataFrame包含20年的月度股票价格样本和数百只不同股票的相应回报。在按"日期"one_answers"账面市值比"(简称"B/M")对样本进行排序后,我想创建一个列,对样本中每个月中B/M最低的公司的股票收益分配值为-1,对B/M最高的公司的股票收益分配值为1(一半的样本分配-1,另一半分配1)。
我尝试在示例中为每个月创建dataframe并将其值属性化,但我发现这不实用。请查看下面的代码:
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 |
感谢您的宝贵时间。
好的,请先计算B/M的中位数
bm_median=df["B/M"].median()
然后创建一个列,检查B/M是否小于中位数
df["signal"]=df["B/M"]<bm_median
如果为假,替换为1,如果为真,替换为-1
df["signal"].replace(False,1,inplace=True)
df["signal"].replace(True,-1,inplace=True)