рассчитывать последовательные дни Python DataFrame - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь сгруппировать идентификаторы по последовательным датам.

ID     Date   
abc    2017-01-07  
abc    2017-01-08  
abc    2017-01-09  
abc    2017-12-09  
xyz    2017-01-05  
xyz    2017-01-06 
xyz    2017-04-15  
xyz    2017-04-16 

Нужно вернуть:

ID     Count
abc    3
abc    1
xyz    2
xyz    2

Я пробовал:

d = {'ID': ['abc', 'abc', 'abc', 'abc', 'xyz', 'xyz', 'xyz', 'xyz'], 'Date': ['2017-01-07','2017-01-08', '2017-01-09', '2017-12-09', '2017-01-05', '2017-01-06', '2017-04-15', '2017-04-16']}
df = pd.DataFrame(data=d)
df['Date'] =  pd.to_datetime(df['Date'])

today = pd.to_datetime('2018-10-23')   
x = df.sort_values('Date', ascending=0)
g = x.groupby(['ID'])
x[(today - x['Date']).dt.days == g.cumcount()].groupby(['ID']).size()

Есть ли простой способ сделать это, чтобы получить количествовсех диапазонов дат по идентификатору?

1 Ответ

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

Создайте Series, который проверяет разницу между датами в каждом идентификаторе.Убедитесь, что это не 1 день, а затем сгруппируйте ID и совокупную сумму этой серии.

import pandas as pd

s = df.groupby('ID').Date.diff().dt.days.fillna(1).ne(1).cumsum()
df.groupby(['ID', s]).size().reset_index(level=1, drop=True)

Вывод:

ID
abc    3
abc    1
xyz    2
xyz    2
dtype: int64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...