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

Pandas:满足双条件的分组内累计求和实现方案

解决方案:按分组实现条件累计求和

你完全找对方向了,groupby()正是实现这个需求的核心方法!我们可以结合条件判断和分组累计求和来完美匹配你的需求,下面是具体的实现步骤和代码:

1. 准备示例数据

首先我们先构造你提供的DataFrame:

import pandas as pd

data = {
    'index': [0, 1, 2, 3, 4, 5],
    'x': [0.1, 1.2, 0.25, 1.0, 0.72, 1.5],
    'y': [1, 1, 1, 2, 2, 2],
    'value_1': [12, 10, 7, 3, 5, 10]
}
df = pd.DataFrame(data).set_index('index')

2. 实现分组条件累计求和

我们可以使用groupby('y')对每组单独处理,结合where()方法筛选符合条件的value_1值,再用cumsum()计算累计和:

# 计算cumsum_1:仅x<1时累计value_1,否则计入0,分组累计
df['cumsum_1'] = df.groupby('y').apply(
    lambda group: group['value_1'].where(group['x'] < 1, 0).cumsum()
).reset_index(level=0, drop=True)

# 计算cumsum_2:仅x>1时累计value_1,否则计入0,分组累计
df['cumsum_2'] = df.groupby('y').apply(
    lambda group: group['value_1'].where(group['x'] > 1, 0).cumsum()
).reset_index(level=0, drop=True)

代码说明:

  • groupby('y'):按y列的分组标识进行分组,每个分组独立计算累计和,分组变化时自动重置累计状态。
  • where(group['x'] < 1, 0):仅保留x<1对应的value_1值,其余情况替换为0,这样累计时只会累加符合条件的数值。
  • cumsum():对每个分组内的筛选后的值计算累计和。
  • reset_index(level=0, drop=True):去掉分组产生的额外索引,让结果能正确匹配原DataFrame的每行数据。

3. 调整适配示例结果

观察你提供的示例,行3(x=1.0)的cumsum_2为3,说明你可能需要将x=1的情况计入cumsum_2。只需把cumsum_2的条件改为group['x'] >= 1即可:

df['cumsum_2'] = df.groupby('y').apply(
    lambda group: group['value_1'].where(group['x'] >= 1, 0).cumsum()
).reset_index(level=0, drop=True)

调整后得到的结果就和你给出的示例完全一致了:

x  y  value_1  cumsum_1  cumsum_2
index                                      
0      0.10  1       12        12         0
1      1.20  1       10        12        10
2      0.25  1        7        19        10
3      1.00  2        3         0         3
4      0.72  2        5         5         3
5      1.50  2       10         5        13

内容的提问来源于stack exchange,提问作者Horst-Jackson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 04:22:45