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

如何在Pandas中合并groupby、cumsum与乘积计算为单条语句?

可行的合并方案

你的尝试失败是因为apply返回分组内的乘积序列后,直接调用.cumsum()是对整个结果做全局累加,而非你需要的分组内累加。以下是两种无需临时列的高效合并方案:

方案一:矢量化分组累加(推荐,效率最高)

直接先计算所有行的乘积,再按event分组执行cumsum,一行代码完成:

df['accum_product'] = (df['weight'] * df['score']).groupby(df['event']).cumsum()

这个方法利用pandas的矢量化操作,比apply快得多,完全避免临时列的创建。

方案二:使用apply完成分组内累加(不推荐,效率较低)

如果一定要用apply,需要在lambda内部完成分组内的乘积和累加,最后展开结果对齐原数据:

df['accum_product'] = df.groupby('event').apply(lambda x: (x['weight'] * x['score']).cumsum()).explode()

这里explode()的作用是把分组后的序列展开成原DataFrame的行长度,保证结果和原数据行一一对应。

验证示例

假设你的DataFrame是:

eventweightscore
A23
A45
B12
B34

两种方案都会得到:

eventweightscoreaccum_product
A236
A4526
B122
B3414

和你原来的临时列方法结果完全一致。

内容的提问来源于stack exchange,提问作者bobgott

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 14:02:37