Pandas中同名列按月份计算cumsum无效问题求助
问题
需要对DataFrame中多个同名的Adj_Prod列,按1-12月逐行计算累积和(cumsum),但使用df.groupby('month')['Adj_Prod'].cumsum()后结果与原数据一致,未得到预期的累积和结果。
原数据
month Adj_Prod Adj_Prod Adj_Prod 1 441215.6939045699 441215.6939045699 441215.6939045699 2 519150.654291369 519150.654291369 519150.654291369 3 479624.188336129 479624.188336129 479624.188336129 4 444504.2012028889 444504.2012028889 444504.2012028889 5 327232.2926583468 327232.2926583468 327232.2926583468 6 270260.9249640972 270260.9249640972 270260.9249640972 7 245660.8295624059 245660.8295624059 245660.8295624059 8 174337.2269775 174337.2269775 174337.2269775 9 249508.2308332307 281902.4467308491 240007.62178783625 10 335156.9175691739 409076.49866234337 370223.7513004631 11 410662.9605211421 413049.84287055075 454906.31546153163 12 443616.23516782525 445685.3862165406 446864.45394745696
预期输出
month Adj_Prod Adj_Prod Adj_Prod 1 441216 441216 441216 2 960366 960366 960366 3 1439991 1439991 1439991 4 1884495 1884495 1884495 5 2211727 2211727 2211727 6 2481988 2481988 2481988 7 2727649 2727649 2727649 8 2901986 2901986 2901986 9 3151494 3183888 3141994 10 3486651 3592965 3512217 11 3897314 4006015 3967124 12 4340930 4451700 4413988
解决方案
问题原因
使用groupby('month')是错误的:每个month值对应单独一行数据,分组后每个组只有一条记录,cumsum()自然和原数据完全一致,无法实现跨月份的累积求和。
正确实现
由于数据已经按1-12月顺序排列,直接对所有Adj_Prod列逐列计算累积和即可,最后取整匹配预期输出的整数格式:
# 筛选所有名为Adj_Prod的列 adj_cols = df.columns[df.columns == 'Adj_Prod'] # 计算累积和并取整为整数 df[adj_cols] = df[adj_cols].cumsum().round().astype(int)
说明
- 先定位所有
Adj_Prod列,避免误操作其他列; cumsum()默认按行方向(axis=0)计算,正好符合按月份逐行累积的需求;- 用
round()和astype(int)将结果转换为整数,与预期输出格式一致。
内容的提问来源于stack exchange,提问作者user2100039
相关产品推荐
相关产品推荐

