Pandas按组累计聚合同组当前及之前行元素的实现方法
实现方法
你之前的写法是将分组后的整个组的所有item转为列表,最终返回的是组级别的聚合结果,自然无法得到每行对应的累计值,可以用以下两种方案实现需求:
方案1:列表累加实现(性能最优)
利用Pandas中列表类型的累加会自动拼接元素的特性,实现代码最短、性能最高:
import pandas as pd # 构造测试数据 df = pd.DataFrame({ 'class_id': ['a','a','a','b','b'], 'item': [1,2,3,1,2] }) # 核心逻辑:先把每个item转成单元素列表,再按组累计求和 df['req_output'] = df['item'].apply(lambda x: [x]).groupby(df['class_id']).cumsum()
运行后输出的req_output列完全匹配你给出的预期结果。
方案2:expanding窗口实现(灵活性更高)
如果后续需要自定义累计聚合逻辑,可以用分组后的滑动窗口实现,逻辑更直观:
df['req_output'] = df.groupby('class_id')['item'].expanding()\ .apply(lambda x: list(x), raw=False)\ .reset_index(drop=True)
内容的提问来源于stack exchange,提问作者David Gladson
相关产品推荐
相关产品推荐

