【问题标题】:How to compute cumulative sum of previous N rows in pandas?如何计算熊猫前N行的累积总和?
【发布时间】:2017-10-02 21:06:49
【问题描述】:

我正在使用 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)

但是,这并没有达到我想要的效果,而是旋转了累积和的结果。我怎样才能做到这一点?

【问题讨论】:

    标签: python pandas cumsum


    【解决方案1】:

    你可能不得不这样做

    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
    

    【讨论】:

      【解决方案2】:

      使用min_periods=1window=11sum 致电rolling

      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
      

      【讨论】:

        【解决方案3】:

        检查pandas.Series.expandingseries.expanding(min_periods=2).sum()

        将为您完成这项工作。并且不要忘记设置第 0 个元素,因为它是 NaN。我的意思是,

        accumulation = series.expanding(min_periods=2).sum()
        accumulation[0] = series[0] # or as you like
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-12-27
          • 1970-01-01
          • 1970-01-01
          • 2019-07-26
          • 2017-05-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多