How to calculate the total amount of previous N lines in pandas?

I work with pandas, but I do not have much experience. I have the following 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 

and I need to calculate the total amount of the previous 11 lines. If before there were less than 11, the remaining ones are considered 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 

I tried:

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

However, this does not achieve what I want, but it leads to a rotation of the result of the total amount. How can I achieve this?

+5
source share
2 answers

Call rolling with min_periods=1 and window=11 and sum :

 In [142]: df['A'].rolling(min_periods=1, window=11).sum() Out[142]: 0 NaN 1 0.00 2 0.00 3 3.33 4 13.54 5 20.21 6 27.21 7 35.48 8 41.55 9 43.72 10 47.10 11 49.58 12 51.66 13 58.61 14 55.28 15 46.82 16 46.81 17 49.50 18 47.96 19 48.09 20 48.93 21 45.87 22 43.91 Name: A, dtype: float64 
+11
source

you may need to do this hard

 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 
+1
source

All Articles