Pandas:如何按另一列True值分段聚合指定列对应值
解决方案
可以通过Pandas的分组和掩码操作实现需求,步骤如下:
1. 创建示例DataFrame
import pandas as pd df = pd.DataFrame({ 'column1': [False, False, False, True, False, False, True], 'column2': [1, 1, 1, 1, 1, 1, 1] })
2. 核心处理逻辑
# 生成分组键:每次遇到True时分组号递增 group_key = df['column1'].cumsum() # 掩码操作:将True位置的column2值设为NaN,只保留False位置的数值 temp = df['column2'].mask(df['column1']) # 分组累加计算每组内False对应的column2总和 cumulative_sum = temp.groupby(group_key).cumsum() # 仅在True位置保留累加结果,其余位置设为0 df['column3'] = cumulative_sum.where(df['column1'], 0).fillna(0).astype(int)
3. 结果验证
运行后df['column3']的输出为:
0 0 1 0 2 0 3 3 4 0 5 0 6 2 Name: column3, dtype: int64
逻辑解释
group_key通过对column1的True值累加,把数据划分为「上一个True之后到当前True之前」的分组;temp掩码操作过滤掉True位置的数值,避免干扰累加计算;- 分组累加后,仅在True位置保留该组的累加总和,其余位置置0,正好匹配需求。
内容的提问来源于stack exchange,提问作者Yedaya Schwalm
相关产品推荐
相关产品推荐

