Новый датафрейм из старого + новые столбцы в нов датафрейме

Еще раз всем Здравствуйте! Вообщем дело такое : есть датафрейм :

                            0        2        3  5
0     2021-03-23 07:06:27.758  1.19236  1.19237  6
1     2021-03-23 07:06:31.898  1.19237  1.19238  6
2     2021-03-23 07:06:33.196  1.19237  1.19240  4
3     2021-03-23 07:06:33.919  1.19237  1.19238 -4
4     2021-03-23 07:06:36.596  1.19237  1.19239  4
...                       ...      ...      ... ..
87309 2021-03-24 09:01:07.234  1.18443  1.18462  4
87310 2021-03-24 09:01:07.640  1.18443  1.18461 -4
87311 2021-03-24 09:01:07.742  1.18443  1.18460 -4
87312 2021-03-24 09:01:08.201  1.18443  1.18461  4
87313 2021-03-24 09:01:14.891  1.18444  1.18461  2

Который толком особо ничего не передает, однако появилась идея его преобразовать в новый с шагом в 1м. И так идея такая : в нов датафрейме(дф2) имеются колонки :

  time        znachen_one   znachen_end  srings  max_2   min_2 max_3 min_3   6  4  2  0 -2  -4  -6

где в колонке time берется первая дата

в колонке znachen_one первое значение

в колонке znachen_end последнее значение

в колонке srings кол-во строк между znachen_one и znachen_end(если брать шаг в 1м , то их разное кол-во)

в колонках 6 4 2 0 -2 -4 -6 кол-во из колонки 5 старого дф ( т.е. из примера выше "6"-2раза, "4"-4раза, "-4" - 4 раза, "2"-1 раз, если некоторых параметров нет, то просто ставится 0(нуль)) в колонках max и min соответственно максимальное и минимальное значение из колонок 2 и 3

Вопрос(ы):

  1. каким методом выставить шаг ? как это вообще выглядеть будет
  2. как заполнить остальные колонки ?

P.s. Спасибо что обратили внимание и дочитали до конца. Я очень рад что русскоязычное сообщество стэка не раз помогала и объясняла. B месте с вами развиваюсь не только я, но и такие же начинающие программисты! Всем добра)


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

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

Вот вам удочка, рыбу, надеюсь, сами научитесь ловить. ;)

Воспользуйтесь группировкой и агрегатными функциями.

Пример:

funcs = {
    "znachen_one": ("2", "first"), 
    "znachen_end": ("2", "last"), 
    "srings": ("0", "size"),
    # ...
}
res = df.groupby(pd.Grouper(key="0", freq="1T")).agg(**funcs)
→ Ссылка