如何根据两个现有列的值创建一个列?

How do I create a column based on the values of two existing columns?

我正在使用一个 Pandas DataFrame,其中包含 20 年的月度股票价格样本以及数百种不同股票的相应 returns。在按 'Date' 和 'Book-To-Market'(简称 'B/M')对样本进行排序后,我想创建一个列,将值 -1 分配给 returns 的股票具有最低 B/M 且值为 1 的公司与具有最高 B/M 的公司的股票 returns 的公司(样本的一半分配为 -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)