У меня есть pandas DataFrame, состоящий из трех столбцов: t
, x
и agent
. Они хранят статус x разных агентов в разное время t. Теперь я хочу создать дополнительный столбец v
, в котором будет храниться производная x по времени для каждого агента.
В случае одного агента это будет легко:
df = df.sort_values('t')
df = df.assign(v=np.gradient(df['x'], df['t']))
В случае двух агентов простого расширения, использующего df = df.sort_values(['agent', 't'])
, недостаточно из-за граничных эффектов между агентами. Значение нового столбца v должно рассчитываться по частям, по одному агенту за раз. Я могу сделать это следующим образом, но это уродливо и неэффективно:
df = df.sort_values(['agent', 't'])
df_agents = []
for a in df['agent'].unique():
temp = df[df['agent'] == a]
temp = temp.assign(v=np.gradient(temp['x'], temp['t']))
df_agents.append(temp)
df = pd.concat(df_agents, ignore_index=True)
Есть ли более простой способ сделать то же самое?