Pandas groupby и pct не возвращают ожидаемое значение - программирование
Подтвердить что ты не робот

Pandas groupby и pct не возвращают ожидаемое значение

Для каждого Name в следующем фрейме данных я пытаюсь найти процентное изменение от одного Time к следующему в столбце Amount:

enter image description here

Код для создания кадра данных:

import pandas as pd

df = pd.DataFrame({'Name': ['Ali', 'Ali', 'Ali', 'Cala', 'Cala', 'Cala', 'Elena', 'Elena', 'Elena'],
                   'Time': [1, 2, 3, 1, 2, 3, 1, 2, 3],
                   'Amount': [24, 52, 34, 95, 98, 54, 32, 20, 16]})

df.sort_values(['Name', 'Time'], inplace = True)

Первый подход, который я попробовал (основываясь на этом вопросе и ответе), использовал groupby и pct_change:

df['pct_change'] = df.groupby(['Name'])['Amount'].pct_change()

С результатом:

enter image description here

Это не группировка по имени, потому что это тот же результат, как если бы я не использовал groupby и назвал df['Amount'].pct_change(). Согласно Документации Pandas для pandas.core.groupby.DataFrameGroupBy.pct_change, вышеуказанный подход должен работать для расчета процентного изменения каждого значения к предыдущему значению в группе.

Для второго подхода я использовал groupby с apply и pct_change:

df['pct_change_with_apply'] = df.groupby('Name')['Amount'].apply(lambda x: x.pct_change())

С результатом:

enter image description here

На этот раз все процентные изменения верны.

Почему подход groupby и pct_change не возвращает правильные значения, а использование groupby с apply делает?

Изменить 28 января 2018 года: Это поведение было исправлено в последней версии Pandas, 0.24.0. Для установки запуска pip install -U pandas.

4b9b3361