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

使用numpy.where按多条件循环规则计算pandas新列

问题根源

你写的条件逻辑存在两个核心错误:

  • 循环周期计算错误:你需要的「2个大减数+3个小减数」是长度为5的固定循环,不存在模4的判断逻辑。之前写的(data.index%4) | (data.index%5)实际含义是「索引模4不等于0,或索引模5不等于0」,几乎所有行都会满足这个条件,完全匹配不上你要的位置规则。
  • 变量定义错误:连续两次给subtraction_value赋值会覆盖前一次的数值,后续代码调用未定义的subtraction_value_2也会直接报错。
解决方案

这个场景完全可以继续用numpy.where()实现,不需要更换其他方案,核心是把判断逻辑调整为:对索引以周期长度5取模,模结果小于2(对应每个周期的前2个位置)时使用大减数计算,剩余位置使用小减数计算即可。

修正后的可运行代码如下:

import pandas as pd
import numpy as np

# 明确区分两个减数,避免重复赋值覆盖
large_subtraction = 6
small_subtraction = 3

data = pd.DataFrame({"test":[12, 4, 5, 4, 1, 3, 2, 5, 10, 9]})

data['new_column'] = np.where(
    data.index % 5 < 2,  # 周期长度为5,每个周期前2位为True
    data['test'] - large_subtraction,
    data['test'] - small_subtraction
)

print(data['new_column'])
逻辑扩展说明

如果后续需要调整分段规则,只需要修改两个参数即可:

  • 周期总长度:修改取模的右值,即各分段长度的和
  • 分段位置:修改判断条件的阈值,比如要改成3个大减数、2个小减数的循环,只需要把条件改成data.index % 5 < 3

如果后续需要超过2个分支的判断,可以换成numpy.select()实现多条件匹配,当前双分支场景下numpy.where()是性能最优、写法最简洁的选择。

注:你给出的期望输出中索引7位置的数值和规则计算结果存在偏差,确认减数大小后调整large_subtraction和small_subtraction的赋值即可,位置判断逻辑不需要改动。

内容的提问来源于stack exchange,提问作者Murray Ross

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:09:17