Нахождение ошибки в функции с циклами while - PullRequest
1 голос
/ 23 апреля 2020

У меня есть эта функция:

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)

Цель этой функции - go через заказанный кадр данных и составить список лиц, заплативших одинаковую цену, ПОЛУЧЕННЫХ последовательность «Билет» Я бы. (Я не просто хочу перечислить ВСЕХ людей, которые заплатили одну и ту же цену, независимо от последовательности!)

Фрейм данных:

                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

Когда я проверяю это:

  • same_price(df[:11]) работает очень хорошо, и вывод: {0: [521, 821], 1: [276, 628, 766], 2: [435, 578]}

  • но, same_fare(df[:10]) throws: IndexError: отсутствует один позиционный индексатор -bounds.

Я хотел бы знать, что не так с этой функцией, ребята.

Thx

1 Ответ

0 голосов
/ 23 апреля 2020

Я нашел, что не так, если кому-то интересно ...

df.iloc[n] получает (n + 1) -ю строку кадра данных. Но shape[0]=n означает, что в фрейме данных есть n элементов.

Поэтому мы используем if n+1>df.shape[0]: вместо if n>df.shape[0]:

Cheers:)

...