У меня есть следующий фрейм данных df
.
id start finish location
0 1 2015-12-14 16:44:00 2015-12-15 18:00:00 A
1 1 2015-12-15 18:00:00 2015-12-16 13:00:00 B
2 1 2015-12-16 13:00:00 2015-12-16 20:00:00 C
3 2 2015-12-10 13:15:00 2015-12-12 13:45:00 B
4 2 2015-12-12 13:45:00 2015-12-12 19:45:00 A
5 3 2015-12-15 07:45:00 2015-12-15 18:45:00 A
6 3 2015-12-15 18:45:00 2015-12-18 07:15:00 D
7 3 2015-12-18 07:15:00 2015-12-19 10:45:00 C
8 3 2015-12-19 10:45:00 2015-12-20 09:00:00 H
Я хотел найти id_start_date
и id_end_date
для каждого идентификатора.
В приведенном выше примере есть даты начала и окончания каждой строки. Я хочу иметь два новых столбца id_start_date
и id_end_date
. В столбце id_start_date
я хочу найти самую раннюю дату в столбце начала, специфичную для каждого идентификатора. Это просто. Сначала я могу отсортировать данные на основе идентификатора и начала, затем я могу просто выбрать первую дату начала в каждом идентификаторе или сделать группирование по идентификатору, а затем использовать функцию агрегирования, чтобы найти минимальную дату в столбце начала. Для id_end_date
я могу сделать то же самое. Я могу группировать на основе идентификатора и использовать статистическую функцию, чтобы найти максимальную дату в столбце финиша.
df1 = df.sort_values(['id','start'],ascending=True)
gp = df1.groupby('id')
gp_out = gp.agg({'start': {'mindate': np.min}, 'finish': {'maxdate': np.max}})
когда я печатаю gp_out
, он показывает правильные даты, но как бы я записал их обратно в исходный кадр данных df
. Я ожидаю следующего:
id start finish location id_start_date id_end_date
0 1 2015-12-14 16:44:00 2015-12-15 18:00:00 A 2015-12-14 16:44:00 2015-12-16 20:00:00
1 1 2015-12-15 18:00:00 2015-12-16 13:00:00 B 2015-12-14 16:44:00 2015-12-16 20:00:00
2 1 2015-12-16 13:00:00 2015-12-16 20:00:00 C 2015-12-14 16:44:00 2015-12-16 20:00:00
3 2 2015-12-10 13:15:00 2015-12-12 13:45:00 B 2015-12-10 13:15:00 2015-12-12 19:45:00
4 2 2015-12-12 13:45:00 2015-12-12 19:45:00 A 2015-12-10 13:15:00 2015-12-12 19:45:00
5 3 2015-12-15 07:45:00 2015-12-15 18:45:00 A 2015-12-15 07:45:00 2015-12-20 09:00:00
6 3 2015-12-15 18:45:00 2015-12-18 07:15:00 D 2015-12-15 07:45:00 2015-12-20 09:00:00
7 3 2015-12-18 07:15:00 2015-12-19 10:45:00 C 2015-12-15 07:45:00 2015-12-20 09:00:00
8 3 2015-12-19 10:45:00 2015-12-20 09:00:00 H 2015-12-15 07:45:00 2015-12-20 09:00:00
Как мне получить последние два столбца в исходном фрейме данных df
?