Pandas按Name分组仅当Condition等于New时计算累计和的实现方法
解决方法
你可以先把不符合Condition == 'New'的行对应的Value值替换为0,再按Name分组做累计求和即可,逻辑完全匹配你提的所有规则:
- 非New条件的行贡献值为0,累加时不会改变之前的累计结果,实现「不符合匹配时累计值保持不变」的要求
- 分组初始值自动适配:首行是Old则首行贡献值为0,累计初始值为0;首行是New则贡献值为对应Value,累计初始值为该行Value
代码实现
# 写法1:单句实现,无需新增临时列 df['Cumulative Value'] = df.assign( calc_val = df['Value'].where(df['Condition'] == 'New', 0) ).groupby('Name')['calc_val'].cumsum() # 写法2:拆分步骤更易读 # 先生成仅New条件有值的计算列 df['calc_val'] = df['Value'].where(df['Condition'] == 'New', 0) # 按Name分组累加 df['Cumulative Value'] = df.groupby('Name')['calc_val'].cumsum() # 可选删除临时计算列 df.drop('calc_val', axis=1, inplace=True)
两种写法效果完全一致,运行后生成的Cumulative Value列和你给出的期望输出完全匹配。
内容的提问来源于stack exchange,提问作者tichy
相关产品推荐
相关产品推荐

