如何解决根据最新的LARGEST值替换数据框中当前值的最快方法
说我有一个像这样的数据框
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
当前,我运行一个如下所示的iterrows函数:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。