如何基于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)
代码说明
- 临时值列:通过
where方法将所有Flag=True的行的Close_Delta置为0,确保这些行的累积值为0。 - 分组键生成:利用
Flag列的累积求和生成分组键,每次Flag=True都会开启一个新分组,保证累积求和在重置点重新开始。 - 分组累积求和:对每个分组内的临时值做累积求和,得到符合规则的
Cumulative_Sum列。
内容的提问来源于stack exchange,提问作者Cambo
相关产品推荐
相关产品推荐

