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之前的数。