Как я могу получить «Начало» и «Конец» из данных TimeSeries с помощью GroupBy.agg ()? - PullRequest
1 голос
/ 22 июня 2019

Я пытаюсь суммировать данные, индексированные по временным рядам для графика свечей.Фрейм данных имеет выборку каждые несколько секунд, что не рекомендуется для отображения на линейной диаграмме в течение более длительного периода времени.

Я хотел бы подвести итог к X минутам со значениями [ min, mean, max, 'start', 'end' ]

Я могу получить минимальные, средние, максимальные значения, но как я могу получить «начало» и'end'?

Фрейм данных (df) может выглядеть следующим образом:

DateTime                Vals
2019-04-21 00:00:32     916892
2019-04-21 00:00:42     982588
2019-04-21 00:00:52     471452
2019-04-21 00:01:02     460576
2019-04-21 00:01:12     713764
2019-04-21 00:01:02     460576
...
2019-04-21 00:01:52     780545
2019-04-21 00:02:02     674151
...
2019-04-21 00:02:52     702329
2019-04-21 00:03:02     772237
...
2019-04-21 00:03:52     676713
2019-04-21 00:04:02     640359
...
2019-04-21 00:04:52     635224
2019-04-21 00:05:02     604004
....

(данные заменены на ... для урезания)

Пока у меня есть этоработает:

grp = df.groupby(pd.Grouper(freq='60s'))['Vals'].agg(['min', 'mean', 'max' ])

Что дает мне «ожидаемый» вывод:

DateTime             min           mean     max
2019-04-21 00:00:00  471452  790310.666667  982588
2019-04-21 00:01:00  460576  705737.500000  780545
2019-04-21 00:02:00  674151  711281.333333  772771
2019-04-21 00:03:00  653066  774984.833333  854880
2019-04-21 00:04:00  635224  655078.333333  676513

Однако я также хотел бы:

DateTime             min           mean     max     start   end
2019-04-21 00:00:00  471452  790310.666667  982588  916892  471452
2019-04-21 00:01:00  460576  705737.500000  780545  460576  780545
2019-04-21 00:02:00  674151  711281.333333  772771  674151  702329
2019-04-21 00:03:00  653066  774984.833333  854880  640359  676713
2019-04-21 00:04:00  635224  655078.333333  676513  640359  635224

Есть ли удобный способделать это?

1 Ответ

2 голосов
/ 22 июня 2019

Укажите дополнительные aggfuncs "first" для «начала» и "last" для «конца»:

df.groupby(pd.Grouper(freq='60s'))['Vals'].agg(
    ['min', 'mean', 'max', 'first', 'last'])
                        min           mean     max   first    last
DateTime                                                          
2019-04-21 00:00:00  471452  790310.666667  982588  916892  471452
2019-04-21 00:01:00  460576  603865.250000  780545  460576  780545
2019-04-21 00:02:00  674151  688240.000000  702329  674151  702329
2019-04-21 00:03:00  676713  724475.000000  772237  772237  676713
2019-04-21 00:04:00  635224  637791.500000  640359  640359  635224
2019-04-21 00:05:00  604004  604004.000000  604004  604004  604004

Если вы хотите переименовать выходные столбцы, укажите кортежи в формате <(требуемое_имя, aggfunc)>:

df.groupby(pd.Grouper(freq='60s'))['Vals'].agg(
     ['min', 'mean', 'max', ('start', 'first'), ('end', 'last')])

                        min           mean     max   start     end
DateTime                                                          
2019-04-21 00:00:00  471452  790310.666667  982588  916892  471452
2019-04-21 00:01:00  460576  603865.250000  780545  460576  780545
2019-04-21 00:02:00  674151  688240.000000  702329  674151  702329
2019-04-21 00:03:00  676713  724475.000000  772237  772237  676713
2019-04-21 00:04:00  635224  637791.500000  640359  640359  635224
2019-04-21 00:05:00  604004  604004.000000  604004  604004  604004
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...