найти разницу в датах при группировке по одному клиенту

Есть таблица, в котрой есть столбец id. По каждому клиенут есть несколько дат платежей, например он платил 4-3 раза. Нужно найти разницу между этими платежами (pay_date) по каждому клиенту и сделать отдельный столбец. То есть не общую разницу найти, между первой и последней датой. А между первой и последующей датой и так далее, в рамках каждого клиента.

введите сюда описание изображения

idx = df.reset_index().groupby(['id'])["index"].last().to_numpy()

df['life_time'] = df.groupby(['id'])['pay_date'].diff()

df.loc[idx, "life_time"] = df.loc[idx, "life_time"].combine_first(df.loc[idx, "pay_date"])

Далаю так, как показано на коде, и получается что дата просто переносится со столбца дата платежа, в новый столбец.

Вот здесь представлен один клиент, введите сюда описание изображения В крайнем правом столбце, его платежи по датам, соответственно надо найти разницу между датами. И так по каждому клиенту.


Ответы (1 шт):

Автор решения: SergFSM

не уверен что до конца понял ваши пожелания, попробуйте такой вариант (по понятным причинам этот код не тестировался):

df['life_time'] = df.groupby('id')['pay_date'].apply(lambda x: x.diff().fillna(pd.Timedelta(days=0)).cumsum())

предполагается что pay_date имеет тип Datetime

→ Ссылка