【问题标题】:Fastest way to replace current value in dataframe based on last LARGEST value根据最后一个 LARGEST 值替换数据框中当前值的最快方法
【发布时间】: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

【问题讨论】:

    标签: python pandas numpy loops optimization


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2012-06-19
      • 2021-03-18
      • 1970-01-01
      • 2012-06-22
      • 1970-01-01
      • 1970-01-01
      • 2021-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多