Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 重新启动时数据帧列的累积和_Python_Pandas_Dataframe - Fatal编程技术网

Python 重新启动时数据帧列的累积和

Python 重新启动时数据帧列的累积和,python,pandas,dataframe,Python,Pandas,Dataframe,我想在数据帧上执行以下功能 计算一列的累计和,注意: 它只查看以前的索引,不包括当前索引,例如,第一个索引将为零,因为没有以前的数据可查看 当它不累积时,例如增量为零,它将重新开始计数 Number Cumulative 0 1 0 1 1 1 2 1 2 3 0 3 4 0 0 5

我想在数据帧上执行以下功能

计算一列的累计和,注意:

  • 它只查看以前的索引,不包括当前索引,例如,第一个索引将为零,因为没有以前的数据可查看

  • 当它不累积时,例如增量为零,它将重新开始计数

          Number  Cumulative
       0       1           0
       1       1           1
       2       1           2
       3       0           3
       4       0           0
       5       1           0
       6       1           1
       7       0           2
    

  • 我知道有一个扩展函数,但当它看到0时它不会重新启动,这是通过根据前一行是否为0进行分组,然后获得累积计数来实现的:

    >>> df
       Number
    0       1
    1       1
    2       1
    3       0
    4       0
    5       1
    6       1
    7       0
    
    df['Cumulative'] = df.groupby(df.Number.shift().eq(0).cumsum()).cumcount()
    
    >>> df
       Number  Cumulative
    0       1           0
    1       1           1
    2       1           2
    3       0           3
    4       0           0
    5       1           0
    6       1           1
    7       0           2
    
    或者,如果它确实是您想要的
    cumsum
    ,则使用与上述相同的分组应用cumsum,并将其下移1:

    df['Cumulative '] = df.groupby(df.Number.eq(0).cumsum()).cumsum().shift().fillna(0)
    >>> df
       Number  Cumulative 
    0       1          0.0
    1       1          1.0
    2       1          2.0
    3       0          3.0
    4       0          0.0
    5       1          0.0
    6       1          1.0
    7       0          2.0
    

    从pandas.core.groupby.groupby.cumcount(pandas 0.23.4文档)的示例中,为什么df.groupby('A').cumcount()的结果是0 1 2 0 1 3?为什么最后是3?因为这是列
    a
    中第4行
    a
    (而
    cumcount
    从0开始)。这就是为什么在您的情况下,您可以只按分组
    Number
    ,因为在前一行中遇到0时,您正在尝试重置计数器。那么,为什么在您给我的解决方案中,第6行没有显示4,第7行显示5?因为我将您的问题解释为在遇到0时希望重置,所以我按遇到0的时间分组(重置累积计数)明白吗!因此,如果我扩展这个问题(为了学习),我想得到另一列,结果是0 0 0 3 0 0 0 2,基本上我想要子累积中的最大数,或者0之前的数。