为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas 不改变周序号累计总和

Pandas 不改变周序号累计总和

蝴蝶不菲 2023-10-11 22:55:54
我有一个数据框,如下所示:df:RY  Week no Value2020    14  3.953212020    15  3.564252020    16  0.070422020    17  6.454172020    18  0.000292020    19  0.277372020    20  4.126442020    21  0.327532020    22  0.472392020    23  0.287562020    24  1.830292020    25  0.753852020    26  2.089812020    27  2.056112020    28  1.006142020    29  0.021052020    30  0.581012020    31  3.490832020    32  8.290132020    33  8.998252020    34  2.662932020    35  0.164482020    36  2.263012020    37  1.093022020    38  1.665662020    39  1.472332020    40  6.427082020    41  2.679472020    42  6.795512020    43  4.458812020    44  1.879722020    45  0.762842020    46  1.86712020    47  2.071592020    48  2.873032020    49  7.669442020    50  1.204212020    51  9.044162020    52  2.26252020    1   1.170262020    2   14.222632020    3   1.364642020    4   2.648622020    5   8.699162020    6   4.512592020    7   2.834112020    8   3.641832020    9   4.772922020    10  1.647292020    11  1.68782020    12  2.248742020    13  0.32712我使用日期创建了一周无列。在我的场景中,监管年度从 4 月 1 日开始,到明年 3 月 31 日结束,这就是为什么周号从 14 开始,到 13 结束。现在我想创建另一个包含值列的累积和的列。我尝试使用以下代码来使用 cumsum():df['Cummulative Value'] = df.groupby('RY')['Value'].apply(lambda x:x.cumsum())上述代码的问题在于,它从第 1 周开始计算累积和,而不是从第 14 周开始计算。有没有什么方法可以在不影响周订单数的情况下计算累计总和?
查看完整描述

1 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

编辑:您可以按原始顺序的之前和最后一个排序索引对值RY进行Week no排序GroupBy.cumsum

#create default index for correct working

df = 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 Value

0   2020       14   3.95321           53.73092

1   2020       15   3.56425           57.29517

2   2020       16   0.07042           57.36559

3   2020       17   6.45417           63.81976

4   2020       18   0.00029           63.82005

5   2020       19   0.27737           64.09742

6   2020       20   4.12644           68.22386

7   2020       21   0.32753           68.55139

8   2020       22   0.47239           69.02378

9   2020       23   0.28756           69.31134

10  2020       24   1.83029           71.14163

11  2020       25   0.75385           71.89548

12  2020       26   2.08981           73.98529

13  2020       27   2.05611           76.04140

14  2020       28   1.00614           77.04754

15  2020       29   0.02105           77.06859

16  2020       30   0.58101           77.64960

17  2020       31   3.49083           81.14043

18  2020       32   8.29013           89.43056

19  2020       33   8.99825           98.42881

20  2020       34   2.66293          101.09174

21  2020       35   0.16448          101.25622

22  2020       36   2.26301          103.51923

23  2020       37   1.09302          104.61225

24  2020       38   1.66566          106.27791

25  2020       39   1.47233          107.75024

26  2020       40   6.42708          114.17732

27  2020       41   2.67947          116.85679

28  2020       42   6.79551          123.65230

29  2020       43   4.45881          128.11111

30  2020       44   1.87972          129.99083

31  2020       45   0.76284          130.75367

32  2020       46   1.86710          132.62077

33  2020       47   2.07159          134.69236

34  2020       48   2.87303          137.56539

35  2020       49   7.66944          145.23483

36  2020       50   1.20421          146.43904

37  2020       51   9.04416          155.48320

38  2020       52   2.26250          157.74570

39  2020        1   1.17026            1.17026

40  2020        2  14.22263           15.39289

41  2020        3   1.36464           16.75753

42  2020        4   2.64862           19.40615

43  2020        5   8.69916           28.10531

44  2020        6   4.51259           32.61790

45  2020        7   2.83411           35.45201

46  2020        8   3.64183           39.09384

47  2020        9   4.77292           43.86676

48  2020       10   1.64729           45.51405

49  2020       11   1.68780           47.20185

50  2020       12   2.24874           49.45059

51  2020       13   0.32712           49.77771

编辑:


经过一番讨论后,解决方案应简化为GroupBy.cumsum:


df['Cummulative Value'] = df.groupby('RY')['Value'].cumsum()


查看完整回答
反对 回复 2023-10-11
  • 1 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信