如何基于if判断为Pandas DataFrame批量生成多列对应因子信号
实现代码
首先构造测试用DataFrame(替换为你自己的数据集即可):
import pandas as pd import numpy as np df = pd.DataFrame({ 'factor_A': [0.0384, -0.0598, 0.8795], 'factor_B': [-0.0565, 0.0967, 0.0254], 'factor_C': [0.0964, 0.9156, -0.0853] })
方法1:循环实现(可读性强,适合需要自定义额外逻辑的场景)
# 筛选所有前缀为factor_的因子列,可根据你的实际列命名规则调整匹配规则 factor_cols = df.filter(regex='^factor_').columns for col in factor_cols: # 提取因子后缀,生成符合要求的信号列名 suffix = col.split('_')[-1] signal_col = f"{col}_signal_{suffix}" # 向量化判断生成信号值,效率远高于逐行判断 df[signal_col] = np.where(df[col] > 0, 1, -1)
方法2:assign批量生成(代码更简洁,无显式循环)
signal_map = { f"{col}_signal_{col.split('_')[-1]}": np.where(df[col] > 0, 1, -1) for col in df.filter(regex='^factor_').columns } df = df.assign(**signal_map)
处理结果示例
运行后得到的DataFrame结构如下:
| factor_A | factor_B | factor_C | factor_A_signal_A | factor_B_signal_B | factor_C_signal_C |
|---|---|---|---|---|---|
| 0.0384 | -0.0565 | 0.0964 | 1 | -1 | 1 |
| -0.0598 | 0.0967 | 0.9156 | -1 | 1 | 1 |
| 0.8795 | 0.0254 | -0.0853 | 1 | 1 | -1 |
补充说明
- 该方案支持任意数量的因子列,只要列命名符合统一规则,无需手动逐个编写判断逻辑
- 若你的因子列没有统一命名前缀,直接把
df.filter(regex='^factor_').columns替换为你存储因子列名的列表即可 - 后续批量计算因子乘信号也可以用相同的循环逻辑实现:
for col in factor_cols: suffix = col.split('_')[-1] df[f"{col}_adjusted"] = df[col] * df[f"{col}_signal_{suffix}"]
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

