2017-01-12 2 views
2

У меня есть dataframeПанда: разница между датами отсчета

ID date 
111 11-11-2016 
111 14-11-2016 
111 17-11-2016 
222 24-11-2016 
222 27-11-2016 

мне нужно подсчитать разницу между данными для каждого ID. Использую

df['duration'] = df.groupby(['ID','date']).date.apply(lambda x: x - x.iloc[0]) 
idx = df.groupby(['ID'])['duration'].transform(max) == df['count date'] 

Но он возвращает неправильный результат. Как я могу желать? мне нужно получить

ID count date 
111 6 
222 3 

ответ

4
>>> df.groupby('ID')['date'].apply(lambda x: x.max() - x.min()) 
ID 
111 6 days 
222 3 days 

также возможно с numpy.ptp

>>> df.groupby('ID')['date'].agg(np.ptp) 
ID 
111 6 days 
222 3 days 
1

Использование agg «S построен в min и max
See this post

d1 = df.groupby('ID').date.agg(['min', 'max']).diff(axis=1)['max'] 

ID 
111 6 days 
222 3 days 
dtype: timedelta64[ns] 
Смежные вопросы