问题描述
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
我想用该行的最后一个LARGEST值替换下一行的值。所需的输出是这样:
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
df['B'] = df['A']
lastrow = -1
for i,row in df.iterrows():
if lastrow > row['B']:
row['B'] = 0
else:
lastrow = row['B']
但是它很慢。有没有办法提高循环速度?
我计时了,输出了100,000行:
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