基于其他列值对指定列求和Part1:连续同类别行分组累计求和实现咨询
核心实现逻辑
首先识别V1列的连续同值区块(游程分组),按区块计算V2列的总和,再将总和仅赋值给对应区块的最后一行即可。以下提供两种主流数据分析工具的实现代码:
Python Pandas 实现
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'V1': ['A','A','A','A','B','B','B','B','A','A','B','B','B'], 'V2': [1,3,4,2,1,1,2,3,2,4,2,4,5] }) # 生成连续同值区块的分组ID df['group_id'] = (df['V1'] != df['V1'].shift()).cumsum() # 初始化V3列为空 df['V3'] = '' # 计算每个分组的V2总和 group_sum = df.groupby('group_id')['V2'].sum() # 取每个分组的最后一行索引,填充总和 last_row_idx = df.groupby('group_id').tail(1).index df.loc[last_row_idx, 'V3'] = group_sum.values # 可选:删除辅助用的group_id列 df = df.drop('group_id', axis=1)
运行后df的输出结果与你给出的预期效果完全一致。
R 语言(dplyr)实现
library(dplyr) # 构造示例数据 df <- tibble( V1 = c('A','A','A','A','B','B','B','B','A','A','B','B','B'), V2 = c(1,3,4,2,1,1,2,3,2,4,2,4,5) ) # 数据处理 df <- df %>% # 生成连续同值区块的分组ID mutate(group_id = cumsum(V1 != lag(V1, default = first(V1)))) %>% group_by(group_id) %>% # 仅在分组最后一行填充求和结果,其余行留空 mutate(V3 = ifelse(row_number() == n(), as.character(sum(V2)), "")) %>% ungroup() %>% # 删除辅助用的group_id列 select(-group_id)
运行后即可得到目标结果。
内容的提问来源于stack exchange,提问作者Farshid Owrang
相关产品推荐
相关产品推荐

