Pandas 不改变周序号累计总和

我有一个数据框,如下所示:


df:


RY  Week no Value

2020    14  3.95321

2020    15  3.56425

2020    16  0.07042

2020    17  6.45417

2020    18  0.00029

2020    19  0.27737

2020    20  4.12644

2020    21  0.32753

2020    22  0.47239

2020    23  0.28756

2020    24  1.83029

2020    25  0.75385

2020    26  2.08981

2020    27  2.05611

2020    28  1.00614

2020    29  0.02105

2020    30  0.58101

2020    31  3.49083

2020    32  8.29013

2020    33  8.99825

2020    34  2.66293

2020    35  0.16448

2020    36  2.26301

2020    37  1.09302

2020    38  1.66566

2020    39  1.47233

2020    40  6.42708

2020    41  2.67947

2020    42  6.79551

2020    43  4.45881

2020    44  1.87972

2020    45  0.76284

2020    46  1.8671

2020    47  2.07159

2020    48  2.87303

2020    49  7.66944

2020    50  1.20421

2020    51  9.04416

2020    52  2.2625

2020    1   1.17026

2020    2   14.22263

2020    3   1.36464

2020    4   2.64862

2020    5   8.69916

2020    6   4.51259

2020    7   2.83411

2020    8   3.64183

2020    9   4.77292

2020    10  1.64729

2020    11  1.6878

2020    12  2.24874

2020    13  0.32712

我使用日期创建了一周无列。在我的场景中,监管年度从 4 月 1 日开始,到明年 3 月 31 日结束,这就是为什么周号从 14 开始,到 13 结束。现在我想创建另一个包含值列的累积和的列。我尝试使用以下代码来使用 cumsum():


df['Cummulative Value'] = df.groupby('RY')['Value'].apply(lambda x:x.cumsum())

上述代码的问题在于,它从第 1 周开始计算累积和,而不是从第 14 周开始计算。有没有什么方法可以在不影响周订单数的情况下计算累计总和?



蝴蝶不菲
浏览 99回答 1
1回答

小唯快跑啊

编辑:您可以按原始顺序的之前和最后一个排序索引对值RY进行Week no排序GroupBy.cumsum:#create default index for correct workingdf = df.reset_index(drop=True)df['Cummulative Value'] = df.sort_values(['RY','Week no']).groupby('RY')['Value'].cumsum().sort_index()print (df)      RY  Week no     Value  Cummulative Value0   2020       14   3.95321           53.730921   2020       15   3.56425           57.295172   2020       16   0.07042           57.365593   2020       17   6.45417           63.819764   2020       18   0.00029           63.820055   2020       19   0.27737           64.097426   2020       20   4.12644           68.223867   2020       21   0.32753           68.551398   2020       22   0.47239           69.023789   2020       23   0.28756           69.3113410  2020       24   1.83029           71.1416311  2020       25   0.75385           71.8954812  2020       26   2.08981           73.9852913  2020       27   2.05611           76.0414014  2020       28   1.00614           77.0475415  2020       29   0.02105           77.0685916  2020       30   0.58101           77.6496017  2020       31   3.49083           81.1404318  2020       32   8.29013           89.4305619  2020       33   8.99825           98.4288120  2020       34   2.66293          101.0917421  2020       35   0.16448          101.2562222  2020       36   2.26301          103.5192323  2020       37   1.09302          104.6122524  2020       38   1.66566          106.2779125  2020       39   1.47233          107.7502426  2020       40   6.42708          114.1773227  2020       41   2.67947          116.8567928  2020       42   6.79551          123.6523029  2020       43   4.45881          128.1111130  2020       44   1.87972          129.9908331  2020       45   0.76284          130.7536732  2020       46   1.86710          132.6207733  2020       47   2.07159          134.6923634  2020       48   2.87303          137.5653935  2020       49   7.66944          145.2348336  2020       50   1.20421          146.4390437  2020       51   9.04416          155.4832038  2020       52   2.26250          157.7457039  2020        1   1.17026            1.1702640  2020        2  14.22263           15.3928941  2020        3   1.36464           16.7575342  2020        4   2.64862           19.4061543  2020        5   8.69916           28.1053144  2020        6   4.51259           32.6179045  2020        7   2.83411           35.4520146  2020        8   3.64183           39.0938447  2020        9   4.77292           43.8667648  2020       10   1.64729           45.5140549  2020       11   1.68780           47.2018550  2020       12   2.24874           49.4505951  2020       13   0.32712           49.77771编辑:经过一番讨论后,解决方案应简化为GroupBy.cumsum:df['Cummulative Value'] = df.groupby('RY')['Value'].cumsum()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python