根据最后一个 LARGEST 值替换数据框中当前值的最快方法
Posted
技术标签:
【中文标题】根据最后一个 LARGEST 值替换数据框中当前值的最快方法【英文标题】:Fastest way to replace current value in dataframe based on last LARGEST value 【发布时间】:2020-12-01 08:17:34 【问题描述】:假设我有一个看起来像这样的数据框
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
【问题讨论】:
【参考方案1】:检查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
【讨论】:
以上是关于根据最后一个 LARGEST 值替换数据框中当前值的最快方法的主要内容,如果未能解决你的问题,请参考以下文章