Нахождение количества месяцев между перекрывающимися периодами - панды - PullRequest
0 голосов
/ 10 октября 2018

У меня есть набор данных клиентов с их политиками, я пытаюсь определить, сколько месяцев клиент находится с нами.(владение)

df

cust_no poly_no start_date  end_date
1       1       2016-06-01   2016-08-31
1       2       2017-05-01   2018-05-31
1       3       2016-11-01   2018-05-31

вывод должен выглядеть следующим образом,

cust_no no_of_months
1        22

Таким образом, в основном, он должен избавиться от месяцев, когда нет политики и счетпериод перекрытия один раз, а не дважды.Я должен сделать это для каждого клиента, так что группируйте по cust_no, как я могу это сделать?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Для нескольких клиентов вы можете использовать groupby.Продолжая @ ответ Скотта Бостона :

df_range = df.apply(lambda r: pd.Series(
                    pd.date_range(start=r.start_date, end=r.end_date, freq='M')
                    .values), axis=1)
df_range.groupby('cust_no').apply(lambda x: x.stack().unique().shape[0])
0 голосов
/ 10 октября 2018

Один из способов сделать это - создать диапазоны дат для каждой записи, а затем использовать стек для получения всех месяцев.Затем возьмите уникальные значения только для подсчета месяца только один раз:

s = df.apply(lambda x: pd.Series(pd.date_range(x.start_date, x.end_date, freq='M').values), axis=1)
ss = s.stack().unique()
ss.shape[0]

Вывод:

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