Вы можете использовать объекты 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()