Группировка временного ряда с определение Начала и Окончания по группам

Есть временной ряд:

import pandas as pd

myIndex = pd.date_range('2019-01-01', '2019-01-13')
myData ={'A':[1,1,1,2,2,3,3,3,3,3,4,4,4]}
df = pd.DataFrame(myData, index = myIndex)

            A
2019-01-01  1
2019-01-02  1
2019-01-03  1
2019-01-04  2
2019-01-05  2
2019-01-06  3
2019-01-07  3
2019-01-08  3
2019-01-09  3
2019-01-10  3
2019-01-11  4
2019-01-12  4
2019-01-13  4

Нужно сгруппировать по столбцу 'A' определить дату начала и дату окончания каждой группы. Вот желательный результат:

    A   Start       End
0   1   2019-01-01  2019-01-03
1   2   2019-01-04  2019-01-05
2   3   2019-01-06  2019-01-10
3   4   2019-01-11  2019-01-13

Ответы (2 шт):

Автор решения: CrazyElf

Примерно так:

import pandas as pd
myIndex = pd.date_range('2019-01-01', '2019-01-13')
myData ={'A':[1,1,1,2,2,3,3,3,3,3,4,4,4],'B':myIndex}
df = pd.DataFrame(myData)
df.groupby(['A']).aggregate(["min","max"])

Результат:

    B
    min     max
A       
1   2019-01-01  2019-01-03
2   2019-01-04  2019-01-05
3   2019-01-06  2019-01-10
4   2019-01-11  2019-01-13
→ Ссылка
Автор решения: MaxU

Начиная с Pandas 0.25.0 в функции агрегирования можно задавать имена результирующим столбцам.

Исходный DF:

In [6]: df
Out[6]:
            A
2019-01-01  1
2019-01-02  1
2019-01-03  1
2019-01-04  2
2019-01-05  2
2019-01-06  3
2019-01-07  3
2019-01-08  3
2019-01-09  3
2019-01-10  3
2019-01-11  4
2019-01-12  4
2019-01-13  4

решение:

res = (df.reset_index()
         .groupby("A")
         .agg(Start=("index", "min"), End=("index", "max"))
         .reset_index())

результат:

In [8]: res
Out[8]:
   A      Start        End
0  1 2019-01-01 2019-01-03
1  2 2019-01-04 2019-01-05
2  3 2019-01-06 2019-01-10
3  4 2019-01-11 2019-01-13
→ Ссылка