Selecting multiple (neighboring) rows conditionally

前端 未结 2 1892
無奈伤痛
無奈伤痛 2021-01-21 06:43

I\'d like to return the rows which qualify to a certain condition. I can do this for a single row, but I need this for multiple rows combined. For example \'light green\' qualif

2条回答
  •  逝去的感伤
    2021-01-21 07:23

    Here's a try. You would maybe want to use rolling or expanding (for speed and elegance) instead of explicitly looping with range, but I did it that way so as to be able to print out the rows being used to calculate each boolean.

    df = df[['X','Y','Z']]    # remove the "total" column in order
                              # to make the syntax a little cleaner
    
    df = df.head(4)           # keep the example more manageable
    
    for i in range(len(df)):
        for k in range( i+1, len(df)+1 ):
            df_sum = df[i:k].sum()
            print( "rows", i, "to", k, (df_sum>0).all() & (df_sum.sum()>10) )
    
    rows 0 to 1 True
    rows 0 to 2 True
    rows 0 to 3 True
    rows 0 to 4 True
    rows 1 to 2 False
    rows 1 to 3 True
    rows 1 to 4 True
    rows 2 to 3 True
    rows 2 to 4 True
    rows 3 to 4 True
    

提交回复
热议问题