标签: cumsum

在 Python Pandas 中使用 cumsum 和 groupby 并在值为 0 时重置 cumsum

我对python比较陌生。我尝试为每个客户端计算累积总和,以查看相应的不活动月份(标志:1 或 0)。因此,当我们有一个 0 时,需要重置 1 的累积总和。当我们有一个新客户时,也需要重置。请参见下面的示例,其中 a 是客户列,b 是日期。

经过一番研究,我发现了问题“Cumsum reset at NaN”和“In Python Pandas using cumsum with groupby”。我想我有点需要把它们放在一起。将 'Cumsum reset at NaN' 的代码调整为向 0 的重置是成功的:

cumsum = v.cumsum().fillna(method='pad')
reset = -cumsum[v.isnull() !=0].diff().fillna(cumsum)
result = v.where(v.notnull(), reset).cumsum()
Run Code Online (Sandbox Code Playgroud)

但是,我没有成功添加 groupby。我的数还在继续……

所以,一个数据集应该是这样的: import pandas as pd

df =  pd.DataFrame({'a' : [1,1,1,1,1,1,1,2,2,2,2,2,2,2], 
                    'b' : [1/15,2/15,3/15,4/15,5/15,6/15,1/15,2/15,3/15,4/15,5/15,6/15], 
                    'c' : [1,0,1,0,1,1,0,1,1,0,1,1,1,1]})
Run Code Online (Sandbox Code Playgroud)

这应该会产生一个包含 a、b、c 和 d 列的数据框

'd' : [1,0,1,0,1,2,0,1,2,0,1,2,3,4]
Run Code Online (Sandbox Code Playgroud)

请注意,我有一个非常大的数据集,因此计算时间非常重要。

感谢你们对我的帮助

group-by python-3.x pandas cumsum

4
推荐指数
1
解决办法
2386
查看次数

cumsum 与 r 中标记列的重置?

这是我第一次提问,所以请耐心等待。

我的数据集(df)是这样的:

animal   azimuth   south   distance
 pb1      187.561   1       1.992 
 pb1      147.219   1       8.567
 pb1      71.032    0       5.754
 pb1      119.502   1       10.451
 pb2      101.702   1       9.227
 pb2      85.715    0       8.821
Run Code Online (Sandbox Code Playgroud)

我想创建一个额外的列 ( df$cumdist) 来增加累积距离,但在每个单独的动物中,并且仅当df$south==1. 我希望累积总和用df$south==0.

这就是我想要的结果(手动完成):

animal   azimuth   south   distance  cumdist
 pb1      187.561   1       1.992     1.992
 pb1      147.219   1       8.567     10.559 
 pb1      71.032    0       5.754     0 
 pb1      119.502   1       10.451    10.451
 pb2      101.702   1       9.227     9.227 
 pb2      85.715    0       8.821     0
Run Code Online (Sandbox Code Playgroud)

这是我试图实现 cumsum 的代码:

swim.az$cumdist …
Run Code Online (Sandbox Code Playgroud)

for-loop if-statement r cumsum

4
推荐指数
1
解决办法
268
查看次数

在一列中使用 cumsum() 迭代

是否可以cumsum()在另一列上以开始 - 停止条件迭代地使用一列:

  1. 给定df具有一列的数据框,X其中值是递增的。
  2. cumsum() 应在达到 10 或 10 的倍数时停止(例如 20、30、40,...)。
  3. 然后在达到这一点后 (10,20,30,40,..) cumsum() 应该开始新的......等等。
  4. 如果出现平局(20,20 或 30,30),cumsum则应在最后一次出现 10、20、30、40 时停止...这是数据帧:
df <- structure(list(X = c(55L, 95L, 39L, 52L, 22L, 93L, 76L, 82L, 
77L, 58L, 60L, 19L, 31L, 43L, 65L, 56L, 18L, 66L, 21L, 49L, 13L, 
37L, 36L, 51L, 41L, 7L, 91L, 3L, 11L, 65L, 51L, 32L, 25L, 10L, 
5L, 7L, 8L, 3L, 72L, 66L, 93L, 24L, 48L, 44L, 91L, 60L, 62L, 
89L, …
Run Code Online (Sandbox Code Playgroud)

r cumsum dplyr

4
推荐指数
1
解决办法
125
查看次数

使用 groupby 和 cumsum 在 pandas 中获取新列

我有以下数据框:

班级 已收到 发布
FD 10 0
FD 0 2
R M 5 0
R M 0 3
FD 0 2
下午 5 0
下午 1 0
R M 1 0
FD 4 0

我需要下面的数据框:

班级 已收到 发布 剩余数量
FD 10 0 10
FD 0 2 8
R M 5 0 5
R M 0 3 2
FD 0 2 6
下午 5 0 5
下午 1 0 6
R M 1 0 3
FD 4 0 10

剩余数量列是每个班级收到的-发出的 cumsum() …

python pandas cumsum

4
推荐指数
1
解决办法
55
查看次数

在R中应用:递归函数,它根据自己以前的结果运行

如何在按行操作时应用能够"看到"前面结果的函数?

这出现了很多,但我目前的问题需要学生运行总计,如果总数没有达到5则重置.

示例数据:

> df

row   Student Absent Consecutive.Absences                             
1        A       0                    0                              
2        A       1                    1                              
3        A       1                    2                              
4        A       0                    0 <- resets to zero if under 5
5        A       0                    0                              
6        A       1                    1                              
7        A       1                    2                              
8        A       1                    3                              
9        B       1                    1 <- starts over for new factor (Student)
10       B       1                    2                              
11       B       0                    0                              
12       B       1                    1                              
13       B       1                    2                              
14       B       1                    3                              
15 …
Run Code Online (Sandbox Code Playgroud)

r apply cumsum

3
推荐指数
1
解决办法
3195
查看次数

在R中,为什么不-1 + 1 = 0

有人可以帮我理解为什么-1 + 1 <> 0?

有人可以帮助我理解为什么我在内置函数consum(),我的函数ct()和Excel之间得到三个不同的值,当它们都在做同样的事情时?

现在,我很确定答案是一个"回合"问题,但我无法弄清楚这个问题的部分来自何处.我的意思是,这一切"看起来非常简单.

在R中,当我构建序列'a'然后运行cumsum(a)时,我没有像我期望的那样得到0的结果.如果我尝试使用函数计算相同的值,我也会得到不同的答案.最后,如果我尝试使用Excel计算相同的值,我会得到第三个答案.

这是我使用cumsum()得到的:

> a<- seq(-1, 1, by=.1)
> a
 [1] -1.0 -0.9 -0.8 -0.7 -0.6 -0.5 -0.4 -0.3 -0.2 -0.1  0.0  0.1  0.2  0.3
[15]  0.4  0.5  0.6  0.7  0.8  0.9  1.0
> cumsum(a)
 [1] -1.000000e+00 -1.900000e+00 -2.700000e+00 -3.400000e+00 -4.000000e+00
 [6] -4.500000e+00 -4.900000e+00 -5.200000e+00 -5.400000e+00 -5.500000e+00
[11] -5.500000e+00 -5.400000e+00 -5.200000e+00 -4.900000e+00 -4.500000e+00
[16] -4.000000e+00 -3.400000e+00 -2.700000e+00 -1.900000e+00 -1.000000e+00
[21]  1.110223e-15
Run Code Online (Sandbox Code Playgroud)

我写了一个快速函数来测试这个并期望得到相同的答案(或0),但我得到一个完全不同的答案.这是我的功能及其结果:

ct<- function(x){
        result = 0
        for(i in 1:length(x)){
           cat(i, ": Result = …
Run Code Online (Sandbox Code Playgroud)

r seq cumsum

3
推荐指数
1
解决办法
150
查看次数

熊猫在尾随的n个元素上滚动cumsum

使用pandas,在前n个元素上计算滚动cumsum的最简单方法是什么,例如计算尾随三天的销售额:

df = pandas.Series(numpy.random.randint(0,10,10), index=pandas.date_range('2020-01', periods=10))
df
2020-01-01    8
2020-01-02    4
2020-01-03    1
2020-01-04    0
2020-01-05    5
2020-01-06    8
2020-01-07    3
2020-01-08    8
2020-01-09    9
2020-01-10    0
Freq: D, dtype: int64
Run Code Online (Sandbox Code Playgroud)

期望的输出:

2020-01-01     8
2020-01-02    12
2020-01-03    13
2020-01-04     5
2020-01-05     6
2020-01-06    13
2020-01-07    16
2020-01-08    19
2020-01-09    20
2020-01-10    17
Freq: D, dtype: int64
Run Code Online (Sandbox Code Playgroud)

pandas cumsum

3
推荐指数
1
解决办法
2830
查看次数

R:滚动日期范围内的累计总和

在R中,如何在计算行之前的定义时间段内计算cumsum?如果可能的话,首选dplyr.

例如,如果期间是10天,那么函数将实现cum_rolling10:

date    value   cumsum  cum_rolling10
1/01/2000   9   9       9
2/01/2000   1   10      10
5/01/2000   9   19      19
6/01/2000   3   22      22
7/01/2000   4   26      26
8/01/2000   3   29      29
13/01/2000  10  39      29
14/01/2000  9   48      38
18/01/2000  2   50      21
19/01/2000  9   59      30
21/01/2000  8   67      38
25/01/2000  5   72      24
26/01/2000  1   73      25
30/01/2000  6   79      20
31/01/2000  6   85      18
Run Code Online (Sandbox Code Playgroud)

r cumsum dplyr

3
推荐指数
2
解决办法
4543
查看次数

熊猫Cumsum跳过行

我有一个如下的数据帧.

idx vals
0   10
1   21
2   12
3   33
4   14
5   55
6   16
7   77
Run Code Online (Sandbox Code Playgroud)

我想执行cumsum(并避免使用for)但只考虑具有相同的行idx mod 2.例如,对于第3行,我想获得21+33=54,而对于第4行,10+12+14 = 36.

有任何想法吗?

python pandas cumsum

3
推荐指数
1
解决办法
66
查看次数

根据熊猫中的条件重置总和

我的问题与小组中的“求和”非常相似,并在熊猫熊猫中按条件重置:基于附加条件的每个类别的求和,但由于我的条件要求,它们并不能使我到达那里。我有一个看起来像这样的数据框:

  TransactionId     Delta
          14          2
          14          3
          14          1
          14          2
          15          4
          15          2
          15          3
Run Code Online (Sandbox Code Playgroud)

我想创建另一个列“累积”,该列为每个TransactionId计算Delta的总和。因此结果将如下所示:

  TransactionId     Delta    Cumulative
          14          2          2
          14          3          5
          14          1          6
          14          2          8
          15          4          4
          15          2          6
          15          3          9
Run Code Online (Sandbox Code Playgroud)

我具有检查TransactionId相等性设置的条件:

c1 = df.TransactionId.eq(df.TransactionId.shift())
Run Code Online (Sandbox Code Playgroud)

但是我不知道如何将Delta值添加到上一个“累积行”中。

python pandas cumsum

3
推荐指数
1
解决办法
584
查看次数

标签 统计

cumsum ×10

pandas ×5

r ×5

python ×3

dplyr ×2

apply ×1

for-loop ×1

group-by ×1

if-statement ×1

python-3.x ×1

seq ×1