Предполагается, что фрейм данных уже отсортирован
df.groupby(‘ID’).Cash.pct_change()
Однако вы можете ускорить процесс, если предположить, что все отсортировано. Поскольку нет необходимости группировать, чтобы рассчитать процентное изменение от одной строки к следующей
df.Cash.pct_change().mask(
df.ID != df.ID.shift()
)
Это должно привести к значениям столбца, которые вы ищете. Чтобы добавить столбец, вам нужно назначить столбцу или создать новый фрейм данных с новым столбцом
df[‘AnnChange’] = df.groupby(‘ID’).Cash.pct_change()