Я думаю, что вы можете добавить новый столбец со смещением, чтобы иметь легкий доступ в методе применения для сравнения с предыдущей группой.И используйте только первое значение.
Данные:
data = pd.DataFrame(columns=['date', 'volume'],
data = [['2018-04-08 15:52:26.110', 43],
['2018-04-08 15:53:26.110', 17],
['2018-04-08 15:54:26.110', 10],
['2018-04-09 12:40:35.877', 15],
['2018-04-09 12:41:35.877', 16]])
data.date = pd.to_datetime(data.date)
data.date = data.date.dt.day
Код:
data['PercentVolume'] = data.volume.shift(1)
def func(df):
m = df.PercentVolume.values[0]
df.PercentVolume = (df.volume - m) / m * 100
return df
data = data.groupby('day').apply(func)
Вывод:
date volume day PercentVolume
0 2018-04-08 15:52:26.110 43 8 NaN
1 2018-04-08 15:53:26.110 17 8 NaN
2 2018-04-08 15:54:26.110 10 8 NaN
3 2018-04-09 12:40:35.877 15 9 50.0
4 2018-04-09 12:41:35.877 16 9 60.0
Это то, что вы хотите?Надеюсь, это поможет.