Как вычислить совокупную сумму предыдущих N строк в pandas?

Я работаю с пандами, но у меня не так много опыта. У меня есть следующий DataFrame:

          A
0       NaN
1      0.00
2      0.00
3      3.33
4     10.21
5      6.67
6      7.00
7      8.27
8      6.07
9      2.17
10     3.38
11     2.48
12     2.08
13     6.95
14     0.00
15     1.75
16     6.66
17     9.69
18     6.73
19     6.20
20     3.01
21     0.32
22     0.52

и мне нужно вычислить совокупную сумму предыдущих 11 строк. Когда ранее было меньше 11, предполагается, что они остались равными 0.

        B
0     NaN
1    0.00
2    0.00
3    0.00
4    3.33
5    13.54
6    20.21
7    27.20
8    35.47
9    41.54
10    43.72
11   47.09
12   49.57 
13   51.65
14   58.60
15   58.60
16   57.02
17   53.48
18   56.49
19   56.22
20   54.16
21   51.10
22   49.24

Я пытался:

df['B'] = df.A.cumsum().shift(-11).fillna(0)

Однако это не достижение того, что я хочу, а вращение результата кумулятивной суммы. Как я могу этого добиться?


person lmiguelvargasf    schedule 04.05.2017    source источник


Ответы (3)



возможно, вам придется сделать это трудным путем

B = []
i =0
m_lim = 11
while i<len(A):
    if i<m_lim:
      B.append(sum(A[0:i]))
    if i>=m_lim and i < len(A) -m_lim:
        B.append(sum(A[i-m_lim:i]))
    if i>= len(A) -m_lim:
      B.append(sum(A[i:]))
    i=i+1
df['B'] = B
person Mohammad Athar    schedule 04.05.2017

Проверьте pandas.Series.expanding. series.expanding(min_periods=2).sum()

сделает работу за вас. И не забудьте установить 0-й элемент, так как это NaN. Я имею в виду,

accumulation = series.expanding(min_periods=2).sum()
accumulation[0] = series[0] # or as you like
person Levon Minasian    schedule 06.11.2020