【问题标题】:Cumsum as a new column in an existing Pandas dataCumsum 作为现有 Pandas 数据中的新列
【发布时间】:2017-06-11 02:08:14
【问题描述】:

我有一个熊猫数据框定义为:

A   B   SUM_C      
1   1   10     
1   2   20   

我想做一个 SUM_C 的累积总和,并将其作为一个新列添加到同一个数据框中。换句话说,我的最终目标是拥有一个如下所示的数据框:

A   B   SUM_C   CUMSUM_C       
1   1   10      10     
1   2   20      30   

Using cumsum in pandas on group() 显示了生成新数据框的可能性,其中列名 SUM_C 被替换为累积总和。但是,我的要求是将累积总和作为新列添加到现有数据框中。

谢谢

【问题讨论】:

    标签: python pandas dataframe cumsum


    【解决方案1】:

    只需在pandas.Series df['SUM_C'] 上应用cumsum 并将其分配给新列:

    df['CUMSUM_C'] = df['SUM_C'].cumsum()
    

    结果:

    df
    Out[34]: 
       A  B  SUM_C  CUMSUM_C
    0  1  1     10       10
    1  1  2     20       30
    

    【讨论】:

    • 谢谢。提出的问题的正确答案。我还想补充一点,如果我们有两个以上的列并且想要做同样的事情,他们的过程如下: 步骤:1:显然使用排序的数据框 2. 使用 df['CUM_D'] = df. groupby(['A','B'])['D'].cumsum(axis = 0)。跳过 groupby 中的“C”,因为它是进行累积求和的列。
    • 如果您有两列同名,这将失败。在这种情况下,请在继续之前重命名其中一个。
    【解决方案2】:

    概述:您可以使用数据框聚合并将其传递给用户定义的函数

    def accumulate(values):
        """The accumulate function takes the offset previous numbers in a series and sums them.
          args: a dataframe with a 100 numbers
     """
        offset=0
        accumulate=[]
        for i in np.arange(len(values)):
            offset+=1
            accumulate.append(values[:offset].sum())
        
        return accumulate
    
      A=pd.DataFrame(np.arange(1,101), columns=['value'])
    
      A.aggregate(accumulate).plot()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-28
      • 1970-01-01
      • 2015-08-16
      • 1970-01-01
      相关资源
      最近更新 更多