基于上一个最大值替换数据帧中当前值的最快方法



假设我有一个看起来像的数据帧

A
0   17
1   21
2   18
3   11
4    4
5   27
6   21
7   11
8    7
9    4
10   7
11   4
12   3
13  27
14  27
15  11
16  11
17  25

我想将下一行的值替换为该行中最后一个最大的值。所需的输出是:

A   B
0   17  17
1   21  21
2   18   0
3   11   0
4    4   0
5   27  27
6   21   0
7   11   0
8    7   0
9    4   0
10   7   0
11   4   0
12   3   0
13  27  27
14  27  27
15  11   0
16  11   0
17  25   0

目前我运行的iterrows函数如下:

df['B'] = df['A']
lastrow = -1
for i, row in df.iterrows():
if lastrow > row['B']:
row['B'] = 0
else: 
lastrow = row['B']

但它相当慢。有没有办法提高这个循环的速度?

我给它计时,对于100000行,这是输出:

CPU times: user 10.3 s, sys: 4.5 ms, total: 10.3 s
Wall time: 10.4 s

使用cummax进行检查

df['B']=df.A.where(df.A.eq(df.A.cummax()),0)
df
Out[75]: 
A   B
0   17  17
1   21  21
2   18   0
3   11   0
4    4   0
5   27  27
6   21   0
7   11   0
8    7   0
9    4   0
10   7   0
11   4   0
12   3   0
13  27  27
14  27  27
15  11   0
16  11   0
17  25   0

相关内容

最新更新