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

如何在DataFrame中实现Actual Result=1时的递增计数列?

问题解决:DataFrame满足条件时递增计数

原代码问题分析

你的代码无法实现递增计数的核心问题有两个:

  1. 循环完全无效:func_count里的for i in range(1,880)没有实际作用——第一次循环i=1时就执行了return,函数直接终止,导致满足条件时永远返回1,不满足时返回'-'。
  2. 无计数状态维护:apply逐行调用函数时,每次调用都是独立的函数实例,无法保存之前的计数状态,自然没法实现累加递增。

解决方案

方法1:用Pandas内置函数(推荐,高效简洁)

利用布尔掩码和cumsum()直接实现条件累加,这是Pandas中最符合范式的做法:

# 标记所有Actual Result等于1的行
mask = X_machine_learning['Actual Result'] == 1
# 对满足条件的行累加计数
X_machine_learning['Count'] = mask.cumsum()
# 将不满足条件的行替换为'-'
X_machine_learning.loc[~mask, 'Count'] = '-'

mask.cumsum()会对布尔值(True=1,False=0)进行累加,自动为每个满足条件的行生成递增计数,再通过loc把不满足条件的行替换成你需要的'-'。

方法2:带状态的自定义函数(适合复杂逻辑扩展)

如果需要更复杂的判断逻辑,可以用闭包维护计数状态:

def create_counter():
    count = 0
    def counter(row):
        nonlocal count
        if row['Actual Result'] == 1:
            count += 1
            return count
        else:
            return '-'
    return counter

# 创建带状态的计数器函数
count_func = create_counter()
# 逐行应用到DataFrame
X_machine_learning['Count'] = X_machine_learning.apply(count_func, axis=1)

闭包create_counter会生成一个维护count变量的counter函数,每次调用counter时都会更新并复用这个计数,实现递增效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:46:27