Почему pd.qcut () создает массивные границы? - PullRequest
0 голосов
/ 26 марта 2019

У меня есть фрейм данных о событии, столбцом которого является интервал времени, в который это событие произошло. Я хотел бы использовать pd.qcut(), чтобы сделать процентили каждого интервала с учетом событий, которые в нем находятся, и дать каждому событию соответствующий процентиль.

def event_quartiler(event_row):
    in_interval = paired_events.loc[events['TimeInterval'] == event_row['TimeInterval']]
    quartiles = pd.qcut(in_interval['DateTime'], 100)
    counter = 1
    for quartile in quartiles.unique():
        if(event_row['DateTime'] in quartile):
            return counter
        counter = counter+1
        if(counter > 100): break
    return -1

events['Quartile'] = events.apply(event_quartiler, axis=1)

Я ожидал, что это просто установит в столбце Quartile соответствующий процентиль каждого события, но вместо этого код будет работать вечно и эффективно сдувается, выводя следующее:

ValueError: ("Bin edges must be unique: array([1.55016605e+18, 1.55016616e+18, 1.55016627e+18, 1.55016632e+18,\n       1.55016632e+18, 1.55016636e+18,
... (I put the ellipsis here because there are 100 data points) 
1.55017534e+18, 1.55017545e+18,\n       1.55017555e+18]).\nYou can drop duplicate edges by setting the 'duplicates' kwarg", 'occurred at index 6539')

Нет ничего особенного в данных на 6539 или любых событиях в их интервале, но я не могу найти, где я ошибаюсь с кодом.

1 Ответ

0 голосов
/ 29 марта 2019

Я выяснил проблему: qcut пытается поместить все точки данных в квартили, в то время как cut берет минимальное и максимальное значения и разрезает их на n ячеек. Поскольку в этом примере у меня было больше квартилей, которые я пытался создать, чем фактических точек данных, qcut терпел неудачу.

Простое использование нарезки на 100 корзин решило мою проблему, и я смог сделать процентили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...