Запись нового столбца в pandas фрейме данных только с частичной инициализацией - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть 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)

Есть ли более простой способ сделать то же самое?

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