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

Pandas可变窗口计算:实现连续负数分段累计计数

Pandas 连续负数分段计数解决方案

核心思路

通过分组标识区分每一段连续的负数区间,再在分组内做累计计数,遇到正数自动重置计数。

完整可运行代码

import pandas as pd

# 构造测试数据
numbers = pd.DataFrame({'E': [-0.66, -0.32, 1.4, -0.45, -0.32, -0.76, 1.1, 2.9]})

# 方法1:分步实现,方便调试查看中间结果
# 1. 标记是否为负数
numbers['is_negative'] = numbers['E'] < 0
# 2. 生成分组ID:每遇到一次正数,分组ID+1
numbers['group_id'] = (~numbers['is_negative']).cumsum()
# 3. 分组内累计计数
numbers['sum_negative'] = numbers.groupby('group_id')['is_negative'].cumsum().astype(int)

# 可选:不需要中间列的极简实现
# numbers['sum_negative'] = numbers['E'].lt(0).groupby(numbers['E'].ge(0).cumsum()).cumsum().astype(int)

print(numbers)

输出结果

indexEis_negativegroup_idsum_negative
0-0.66True01
1-0.32True02
21.40False10
3-0.45True11
4-0.32True12
5-0.76True13
61.10False20
72.90False30

实现逻辑说明

  • numbers['E'].lt(0) 生成布尔序列,负数对应True(等价于数值1),正数对应False(等价于数值0)
  • numbers['E'].ge(0).cumsum() 每遇到正数就累加1,天然将每一段连续负数划分到同一个分组
  • 按分组ID分组后对布尔列执行cumsum,自动生成分段递增的连续计数,正数位置的计数自然为0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 22:06:05