Среднее время между отметками времени на группу не в порядке - PullRequest
0 голосов
/ 27 января 2019

Я хотел бы получить mean время между отметками времени на группу.Тем не менее, группы не упорядочены.

Код для создания df:

d = {'ID': ['AI100', 'AI200', 'AI200', 'AI100','AI200','AI100'],
     'Date': ['2019-01-10', '2018-06-01', '2018-06-11','2019-01-15','2018-06-21', '2019-01-22']}

data = pd.DataFrame(data=d)
data = data[['ID', 'Date']]
data['Date'] = pd.to_datetime(data['Date'])
data  

    ID  Date
0   AI100   2019-01-10
1   AI200   2018-06-01
2   AI200   2018-06-11
3   AI100   2019-01-15
4   AI200   2018-06-21
5   AI100   2019-01-22

Я пробовал следующее:

data = data.sort_values(['ID','Date'],ascending=True).groupby('ID').head(3) #group the IDs
data['diffs'] = data['Date'].diff()
data['diffs'] = data['diffs'].apply(lambda x: x.days)
data = data.groupby(['ID'])[('diffs')].agg('mean')

Однако это приводит к:

data.add_suffix('ID').reset_index()

    ID  diffs
0   AI100ID 6.000000
1   AI200ID -71.666667

Среднее время для группы AI100ID является правильным, но не для группы AI200ID.

Что не так?

1 Ответ

0 голосов
/ 27 января 2019

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

Измените вашСтрока с этим, и вы должны получить ожидаемый результат:

data['diffs'] = data.groupby('ID')['Date'].diff()

Сноска:

Еще один совет, не связанный с основной проблемой, но на тот случай, если вы не знали:

data['diffs'] = data['diffs'].apply(lambda x: x.days)

Может быть написано для использования более быстрых векторизованных операций с использованием средства доступа .dt:

data['diffs'] = data['diffs'].dt.days
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...