使用Python Pandas按年月分组对指定列计算分组内逐行累计乘积
实现代码
你已经完成了A、B列加1的操作,接下来直接按年月分组调用累计乘积方法即可:
# 方式1:新增列保存累计乘积结果,保留原始加1后的A、B值 df[['A_cumprod', 'B_cumprod']] = df.groupby(df.index.to_period('M'))[['A', 'B']].cumprod() # 方式2:直接覆盖原有的A、B列为累计乘积结果 # df[['A', 'B']] = df.groupby(df.index.to_period('M'))[['A', 'B']].cumprod()
结果验证
以你举例的2013年2月的A列计算为例,代码输出结果和手动计算完全一致:
| 日期 | 加1后的A值 | 累计乘积(A_cumprod) | 手动计算逻辑 |
|---|---|---|---|
| 2013-02-26 | 1.211957 | 1.211957 | 1.211957 |
| 2013-02-27 | 0.625346 | 0.757920 | 1.211957 * 0.625346 |
| 2013-02-28 | 0.357986 | 0.271349 | 1.211957 * 0.625346 * 0.357986 |
2013年3月及之后的月份会自动重新开始累计乘积计算,完全匹配需求。
逻辑说明
df.index.to_period('M')会将datetime类型的行索引转换为「年-月」格式的周期值,作为分组的依据,确保每个自然月为一个独立分组groupby()后调用cumprod()方法,会在每个分组内部按行的原始顺序计算累计乘积,自动保持原表的索引和行数不变
内容的提问来源于stack exchange,提问作者ah bon
相关产品推荐
相关产品推荐

