如何基于两个现有列的值创建一个列?



我正在处理一个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)

最新更新