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

Pandas新建计算列如何按固定间隔切换计算规则并保证性能

实现方案

直接用numpy向量化运算实现,无Python层面循环,性能远高于for循环和apply方法,百万行级数据也能毫秒级完成计算。
核心逻辑:先按位置匹配每个索引对应的减数,再一次性做数组减法,完全匹配指定循环规则:索引对4取模为0时(即0、4、8……位置)使用第二个减数,其余位置使用原始减数。

完整可运行代码如下:

import pandas as pd
import numpy as np

subtraction_value = 3
subtraction_value_2 = 6
# 补全原代码缺失的右括号
data = pd.DataFrame({"test":[12, 4, 5, 4, 1, 3, 2, 6, 10, 9]})

# 提取反转后的目标列,加.to_numpy()避免pandas索引对齐导致反转失效
reverse_col = data['test'][::-1]
# 生成连续位置序列,避免自定义索引导致规则匹配错误
position = np.arange(len(data))
# 按规则批量生成对应减数数组
sub_arr = np.where(position % 4 == 0, subtraction_value_2, subtraction_value)
# 直接计算得到新列
data['new_column'] = reverse_col - sub_arr

运行后打印data['new_column']即可得到预期输出:

0    6
1    1
2    2
3    1
4   -5
5    0
6   -1
7    3
8    4
9    6
Name: new_column, dtype: int64

注意:pandas中直接对Series用[::-1]会保留原索引,直接运算时会按索引对齐导致值不反转,如果需要真正按顺序反转值,请将反转代码改为data['test'].to_numpy()[::-1]取到底层numpy数组再反转,不会出现索引对齐问题。

如果后续需要调整减数规则,比如增加更多档位的减数,可以替换np.where为np.select做多条件匹配,依然保持向量化运算的高性能。


内容的提问来源于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.30 08:15:32