You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于DataFrame股票价格列多条件行值比较及投票机制实现求助

解决方案:基于Pandas实现股票涨跌幅的阈值判断与多数投票逻辑

以下是完整的可运行代码,完全匹配你描述的需求逻辑:

import pandas as pd
import numpy as np

# 1. 构造示例数据(匹配你提供的样例)
np.random.seed(0)
df = pd.DataFrame({'Close': np.random.uniform(0, 100, size=5)})
# 手动设置change列,模拟实际数据
df['change'] = [np.nan, 16.637586, -11.242599, -5.788019, -12.122838]

# 2. 设置阈值(0-1范围,这里以0.5为例,可根据需求调整)
threshold = 0.5

# 3. 步骤1:计算相邻change的差值并生成判断值
# 计算后一个change与前一个的差值(对应1&2、2&3、3&4的索引对)
diff_change = df['change'].diff()
# 处理NaN值(第一个差值无前置数据,设为0)
diff_change = diff_change.fillna(0)

# 根据阈值生成1/-1/0的判断列
judge = np.where(
    diff_change > threshold, 1,
    np.where(diff_change < -threshold, -1, 0)
)

# 4. 步骤2:实现多数投票逻辑(含特殊规则)
def vote(window):
    # 统计-1、0、1的出现次数
    count_neg1 = (window == -1).sum()
    count_0 = (window == 0).sum()
    count_1 = (window == 1).sum()
    
    # 特殊规则:若三个值分别为1、0、-1,直接返回0
    if count_neg1 == 1 and count_0 == 1 and count_1 == 1:
        return 0
    # 多数投票逻辑
    max_count = max(count_neg1, count_0, count_1)
    if count_1 == max_count:
        return 1
    elif count_neg1 == max_count:
        return -1
    else:
        return 0

# 5. 步骤3:滑动窗口应用投票,生成Result列
# 将判断值转为Series,使用滑动窗口(窗口大小3)
judge_series = pd.Series(judge)
# 对每个连续3组判断值应用投票函数
result_rolling = judge_series.rolling(window=3).apply(vote, raw=True)
# 填充NaN值(前两行无法形成完整窗口,设为0)并转为整数
df['Result'] = result_rolling.fillna(0).astype(int)

# 输出结果
print(df)

分步解释:

  1. 数据构造:模拟你提供的股票收盘价和涨跌幅数据,确保测试环境与需求一致。
  2. 阈值设置:可根据实际需求调整threshold的值(范围0-1)。
  3. 差值计算与判断:
    • 用diff()计算相邻涨跌幅的差值(后值减前值),对应你要求的1&2、2&3等索引对。
    • 用np.where()嵌套实现三分支判断:差值>阈值返回1,<-阈值返回-1,否则返回0。
  4. 投票逻辑实现:
    • 自定义vote()函数,先检查特殊规则(1、0、-1各出现一次时返回0)。
    • 统计各值出现次数,返回出现次数最多的结果;若次数相同(除特殊规则外),返回0。
  5. 滑动窗口生成结果:
    • 使用rolling(window=3)创建连续3组的滑动窗口,对每个窗口应用投票函数。
    • 前两行无法形成完整窗口,用fillna(0)填充,最终得到与原数据行数一致的Result列。

内容的提问来源于stack exchange,提问作者Raagib khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 04:31:02