每当列中遇到0时,Python都会使用上一个值求和

2024-03-29 04:49:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pandas列,当它中遇到0时,我想使用上一个值对它进行求和。通过这个例子可以更清楚地看到-

ds = pd.DataFrame([0,1,2,3,4,50,0,1,3,5,55,0,5], columns = ['a'])

print(ds)

    a
0   0
1   1
2   2
3   3
4   4
5   50
6   0
7   1
8   3
9   5
10  55
11  0
12  5

输出应为-

    a
0   0
1   1
2   2
3   3
4   4
5   50
6   50
7   51
8   53
9   55
10  105
11  105
12  110

2条回答

可以利用.diff(-1)直接获得条纹结束位置(50和55):

  • 首先,将.diff(-1)放入.where()以保留条纹结束元素,同时用0填充其他元素
  • 其次,执行cumsum(),用fill_value=0将结果向前移动1,并将其添加到原始数据中

代码:

ds["a"] += ds["a"].where(ds["a"].diff(-1) > 0, other=0).cumsum().shift(fill_value=0)

结果:

print(ds)
      a
0     0
1     1
2     2
3     3
4     4
5    50
6    50
7    51
8    53
9    55
10  105
11  105
12  110

尝试使用shift然后where将所有非0屏蔽到NaN,然后执行cumsum,因为需要再次添加前一个填充值

df.a = df.a.add(df.a.shift().where(df.a.eq(0)).cumsum().ffill(),fill_value=0)
Out[132]: 
0       0.0
1       1.0
2       2.0
3       3.0
4       4.0
5      50.0
6      50.0
7      51.0
8      53.0
9      55.0
10    105.0
11    105.0
12    110.0
Name: a, dtype: float64

相关问题 更多 >