间隔累计和

2024-10-02 06:24:11 发布

您现在位置:Python中文网/ 问答频道 /正文

请考虑以下数据帧:

dfgg
Out[305]: 
                   Parts_needed   output
Year Month PartId              
2018 1     L27849            72    72
     2     L27849            75   147
     3     L27849           101   248
     4     L27849           103   351
     5     L27849            77
     6     L27849           120
     7     L27849            59
     8     L27849            79
     9     L27849            28
     10    L27849            64
     11    L27849           511
     12    L27849            34
2019 1     L27849            49
     2     L27849            68
     3     L27849            75
     4     L27849            45
     5     L27849            84
     6     L27849            42
     7     L27849            40
     8     L27849            52
     9     L27849           106
     10    L27849            75
     11    L27849           176
     12    L27849            58  2193
2020 1     L27849           135  2328
     2     L27849            45  2301
     3     L27849            21  2247
     4     L27849            35
     5     L27849            17
     6     L27849            39
                        ...
2025 7     L27849            94
     8     L27849            13
     9     L27849            94
     10    L27849            65
     11    L27849           141
     12    L27849            34
2026 1     L27849            22
     2     L27849           132
     3     L27849            49
     4     L27849            33
     5     L27849            48
     6     L27849            53
     7     L27849           103
     8     L27849           122
     9     L27849           171
     10    L27849           182
     11    L27849            68
     12    L27849            23
2027 1     L27849            44
     2     L27849            21
     3     L27849            52
     4     L27849            53
     5     L27849            57
     6     L27849           187
     7     L27849            69
     8     L27849            97
     9     L27849            31
     10    L27849            29
     11    L27849            33
     12    L27849            8

在这个数据帧中,我需要每隔2年获得所需零件的累计和。例如: for 1-2018, 72将继续添加到以下行75,101,103..直到1-2020 135。类似地,at 2-2018, 75将继续被添加到以下行101,103..直到2-2020 45。然而,在过去的两年中,无论剩余的行数是多少,累计的总和都将是。我不能设定一个范围np.cumsum公司有人能帮帮我吗?在

编辑:我已经编辑,包括预期的输出。2020年2-2020年产量为2328+45-72(因为增加了72年),3-2020年产量为2301+21-75(因为75已经增加了2年),依此类推。在


Tags: 数据编辑foroutputoutyearatparts
1条回答
网友
1楼 · 发布于 2024-10-02 06:24:11

基本上,如果开头是零填充的话,你需要一个连续的总数。你可以用卷积。下面是一个简单的numpy示例,您应该能够适应您的pandas用例:

import numpy as np
a = np.array([10,20,3,4,5,6,7])
width = 4
kernel = np.ones(width)
np.convolve(a,kernel)

返回

^{pr2}$

如您所见,这是一个累积的和,直到输出中的37,之后是滚动4元素窗口的总和。在

假设你每年都有24排工作。在

下面是一个熊猫的例子,每年只使用2个月(因此width4,而不是24):

>>> import numpy as np
>>> import pandas as pd
>>> df = pd.DataFrame({'year':[18,18,19,19,20,20,21,21],'month':[1,2,1,2,1,2,1,2],'parts':[230,5,2,12,66,32,1,2]})
>>> df
   month  parts  year
0      1    230    18
1      2      5    18
2      1      2    19
3      2     12    19
4      1     66    20
5      2     32    20
6      1      1    21
7      2      2    21
>>> width = 4
>>> kernel = np.ones(width)
>>> # Drop the last elements as you don't want the window to roll passed the end
>>> np.convolve(df['parts'],kernel)[:-width+1]
array([230., 235., 237., 249.,  85., 112., 111., 101.])

现在您只需将最后一个数组分配给DataFrame的新列

相关问题 更多 >

    热门问题