如何计算pandas中前N行的累计和?
How to compute cumulative sum of previous N rows in pandas?
我正在 pandas 工作,但我没有那么多经验。我有以下数据框:
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)
然而,这并没有达到我想要的效果,而是旋转了一个累加和的结果。我怎样才能做到这一点?
你可能不得不以艰难的方式做到这一点
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
呼叫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
勾选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
我正在 pandas 工作,但我没有那么多经验。我有以下数据框:
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)
然而,这并没有达到我想要的效果,而是旋转了一个累加和的结果。我怎样才能做到这一点?
你可能不得不以艰难的方式做到这一点
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
呼叫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
勾选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