Группировка временного ряда с определение Начала и Окончания по группам
Есть временной ряд:
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