разработка первого и последнего мероприятия - PullRequest
0 голосов
/ 14 мая 2018

Я работаю над некоторыми данными о событиях с датой и временем.для каждого столбца события gsm_id есть идентификатор.Для каждого события есть дата и время начала matchdatetime столбец.будет происходить несколько событий, представленных столбцом eventdatetime column.Существует также столбец, в котором записан PreviousEventTime столбец.Как я могу создать новый столбец для записи следующего: 1) первое событие для каждого "gsm_ID, где matchdatetime столбец и PreviousEventTime столбец одинаковы 2) последнее событие для каждого gsm_id , где "eventdatetime" - самое последнее.

    gsm_id   eventdatetime  matchdatetime   PreviousEventTime
    2462794 8/11/2017 18:46 8/11/2017 18:45 8/11/2017 18:45
    2462794 8/11/2017 18:49 8/11/2017 18:45 8/11/2017 18:46
    2462794 8/11/2017 19:13 8/11/2017 18:45 8/11/2017 18:49
    2462794 8/11/2017 19:31 8/11/2017 18:45 8/11/2017 19:13
    2462794 8/11/2017 19:40 8/11/2017 18:45 8/11/2017 19:31
    2462794 8/11/2017 20:07 8/11/2017 18:45 8/11/2017 19:40
    2462794 8/11/2017 20:09 8/11/2017 18:45 8/11/2017 20:07
    2462796 8/12/2017 14:23 8/12/2017 14:00 8/12/2017 14:00
    2462796 8/12/2017 14:38 8/12/2017 14:00 8/12/2017 14:23
    2462796 8/12/2017 14:42 8/12/2017 14:00 8/12/2017 14:38
    2462796 8/12/2017 15:08 8/12/2017 14:00 8/12/2017 14:42
    2462796 8/12/2017 15:27 8/12/2017 14:00 8/12/2017 15:08
    2462795 8/12/2017 17:39 8/12/2017 16:30 8/12/2017 16:30
    2462795 8/12/2017 17:44 8/12/2017 16:30 8/12/2017 17:39

Кто-нибудь может посоветовать, как работать? Если вы хотите загрузить файл, пожалуйста, скачайте файл ниже:

https://drive.google.com/open?id=1SWuxm2PtLSphH6lvivPioTlfLe2JhGH1

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Вы можете использовать объекты pandas groupby для обоих вопросов.

Вопрос 1)

import pandas as pd
data = pd.read_csv('Data_test.csv')

Сначала найдите индексы, в которых matchdatetime и PreviousEventTime равны, а затем сгруппируйте по "gsm_id".Наконец, агрегирование по "первой" функции:

first_equal_dates = df[df['PreviousEventTime'] == df['matchdatetime']].groupby('gsm_id')['eventdatetime'].first()

Затем вы можете объединить / объединить это на исходном фрейме данных.

Вопрос 2)

Опять просто сгруппировать "gsm_id", но вместо этого используйте функцию" last ":

import pandas as pd
data = pd.read_csv('Data_test.csv')
last_event_dates = data.groupby('gsm_id').agg({'eventdatetime': 'last'})

Снова просто объедините / объедините это в исходном кадре данных, если вы хотите, чтобы он был столбцом в кадре данных.

Вы также можетепросто присвойте результаты в одну строку:

data.set_index('gsm_id').assign(question_1=first_equal_dates, mylast=last_event_dates).reset_index()
0 голосов
/ 14 мая 2018

Вы можете использовать:

In [203]: s1 = df[df['PreviousEventTime'] == df['matchdatetime']].groupby('gsm_id')['eventdatetime'].first()

In [204]: s1
Out[204]: 
gsm_id
2462794   2017-08-11 18:46:00
2462795   2017-08-12 17:39:00
2462796   2017-08-12 14:23:00
Name: eventdatetime, dtype: datetime64[ns]

In [205]: s2 = df.groupby('gsm_id')['eventdatetime'].last()

In [206]: s2
Out[206]: 
gsm_id
2462794   2017-08-11 20:09:00
2462795   2017-08-12 17:44:00
2462796   2017-08-12 15:27:00
Name: eventdatetime, dtype: datetime64[ns]

Тогда наконец:

df.set_index('gsm_id').assign(myfirst=s1, mylast=s2).reset_index()
...