为什么矢量python代码在行之间比较值不起作用?

我的数据框为:


    data = [ ['A',1,200,200],['A',2,-30,],3,500,4,10,5,-45,['B',30,500],12,50,]]

    df = pd.DataFrame(data,columns = ['batch','idx','op_sum','var3']) 

我正在尝试获得以下结果:


    batch   idx     op_sum      var3
    A        1       200         200
    A        2       -30         -30
    A        3       500         -30         
    A        4        10         -30
    A        5       -45         -45        
    B        1        30         500        
    B        2        12          12        
    B        3        50          12        

逻辑是:

If cur row(op_sum) < previous row(var3) then  
 cur row(var3) = cur row(op_sum)  
else cur row(var3) = previous row(var3)

注意:我可以使用iterrows和iloc来实现,但对于数百万行而言并不实用。

我在向量化方面已经走了这么远:

#(a)   
    df.var3.ix[(df.op_sum<df.var3.shift()) | (df.var3.shift().isnull())] = df.op_sum.ix[(df.op_sum<df.var3.shift()) | (df.var3.shift().isnull())]    

#(b)  
    df.var3.ix[(df.op_sum>df.var3.shift())] = df.var3.shift().ix[(df.op_sum>df.var3.shift())]

这将产生以下内容:

    batch   idx     op_sum      var3
    A        1       200         200
    A        2       -30         -30
    A        3       500         -30         
    A        4        10         -10  #Not Good
    A        5       -45         -45        
    B        1        30         -45  #Not Good   
    B        2        12          12        
    B        3        50          12        

当op_sum = 10> var3.shift()= -30时,应该给我var3 = -30,同样,对于另一个不好的值!

另外,当我尝试先执行df.groupby('batch')来执行(a)和(b)时,它会给我AttributeError: Cannot access callable attribute 'ix' of 'SeriesGroupby' objects,try using 'apply' method

请帮助我克服终点线。非常感激。

wxh19871203 回答:为什么矢量python代码在行之间比较值不起作用?

我相信您需要GroupBy.cummin

df['var3'] = df.groupby('batch')['op_sum'].cummin()
print (df)
  batch  idx  op_sum  var3
0     A    1     200   200
1     A    2     -30   -30
2     A    3     500   -30
3     A    4      10   -30
4     A    5     -45   -45
5     B    1      30    30
6     B    2      12    12
7     B    3      50    12
本文链接:https://www.f2er.com/3139550.html

大家都在问