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

如何基于Flag列重置Pandas DataFrame中Close_Delta的累积求和?

解决Pandas中基于Flag重置累积求和的问题

需求说明

现有包含Close_Delta和Flag列的Pandas DataFrame,Flag列用于标记Close_Delta的极性变化,需要新增Cumulative_Sum列,规则如下:

  • 当Flag为True时,累积求和从0重新开始,且该行的Cumulative_Sum值为0
  • 当Flag为False时,累加当前行及同一段连续False行的Close_Delta值

预期结果示例:

'Close_Delta'  'Flag'   'Cumulative_Sum'
      1          T          0
     -2          T          0
     -3          F         -3
     -1          F         -4
      2          T          0
      1          F          1
      3          F          4
     -1          T          0
      2          T          0
      4          F          4
     -2          T          0
     -1          F         -1

用户错误代码

用户尝试的代码因分组逻辑错误,无法生成符合预期的累积求和结果:

import pandas as pd

# Sample DataFrame(原代码中[T, T,...]语法错误,已修正为布尔值)
df = pd.DataFrame({
    'Close_Delta': [1, -2, -3, -1, 2, 1, 3, -1, 2, 4, -2, -1],
    'Flag':        [True,  True,  False,  False, True, False, False,  True, True, False,  True,  False]
})

# 创建辅助列识别Flag的变化
df['Temp'] = (df['Flag'] != df['Flag'].shift(1))

# 按辅助列分组计算累积求和
df['Cumulative_Sum'] = df.groupby('Temp')['Close_Delta'].cumsum()

# 删除辅助列
df = df.drop(columns=['Temp'])

# 输出结果
print(df)

正确实现方法

核心思路:先将Flag=True的行的累积值置为0,再基于Flag生成正确的分组键,对每个分组内的数值做累积求和。

完整代码

import pandas as pd

# 修正后的样本DataFrame
df = pd.DataFrame({
    'Close_Delta': [1, -2, -3, -1, 2, 1, 3, -1, 2, 4, -2, -1],
    'Flag':        [True,  True,  False,  False, True, False, False,  True, True, False,  True,  False]
})

# 生成临时值列:将Flag=True的行的Close_Delta替换为0
df['temp_val'] = df['Close_Delta'].where(df['Flag'] == False, 0)

# 生成分组键:每次遇到Flag=True时,分组号递增
df['group_key'] = df['Flag'].cumsum()

# 按分组键计算累积求和
df['Cumulative_Sum'] = df.groupby('group_key')['temp_val'].cumsum()

# 清理临时列
df = df.drop(columns=['temp_val', 'group_key'])

# 输出最终结果
print(df)

代码说明

  1. 临时值列:通过where方法将所有Flag=True的行的Close_Delta置为0,确保这些行的累积值为0。
  2. 分组键生成:利用Flag列的累积求和生成分组键,每次Flag=True都会开启一个新分组,保证累积求和在重置点重新开始。
  3. 分组累积求和:对每个分组内的临时值做累积求和,得到符合规则的Cumulative_Sum列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 10:20:01