Jeremy
Jeremy

Reputation: 75

Finding the bug in a function with while loops

I have this function:

def same_price(df=df):
    df= df.sort_values(by='Ticket')
    nucleus= dict()
    k=0
    while df.shape[0]>=2:
        if df.Price.iloc[0]==df.Price.iloc[1]:
            value= df.Price.iloc[0]
            n=0
            nucleus[k]= []
            while df.Price.iloc[n]==value:
                nucleus[k].append(df.index[n])
                n+=1
                if n>df.shape[0]:
                    df.drop(nucleus[k], axis=0, inplace=True)
                    break 
            else:
                df.drop(nucleus[k], axis=0, inplace=True)
                k+=1       
        else:
            if df.shape[0]>=3: 
                df.drop(df.index[0], axis=0, inplace=True)
            else:
                break
    return(nucleus)

The objective of the function is to go through the ordered dataframe, and list together the persons who paid the same price GIVEN the sequence of the 'Ticket'id. (I do not just want to list together ALL the people who paid the same price, no matter the sequence!)

The dataframe:

                Price Ticket
Id                
521          93.5000  12749
821          93.5000  12749
584          40.1250  13049
648          35.5000  13213
633          30.5000  13214
276          77.9583  13502
628          77.9583  13502
766          77.9583  13502
435          55.9000  13507
578          55.9000  13507
457          26.5500  13509
588          79.2000  13567
540          49.5000  13568
48           7.7500   14311
574          7.7500   14312
369          7.7500   14313

When I test it:

I'd like to know what is wrong with this function guys.

Thx

Upvotes: 2

Views: 56

Answers (1)

Jeremy
Jeremy

Reputation: 75

I found what's wrong, if anyone is interested...

df.iloc[n] gets the (n+1)th line of the dataframe. But shape[0]=n means that the dataframe has n elements.

Hence we use if n+1>df.shape[0]:, instead of if n>df.shape[0]:

Cheers :)

Upvotes: 1

Related Questions