Группировка по условию

Привет есть массив данных.

column1 column2
1 12-03-2022 14:57:01
2 12-03-2022 14:57:02
1 12-03-2022 14:57:04
3 12-03-2022 14:58:01
2 12-03-2022 14:59:01
1 12-03-2022 14:59:41

Нужно узнать сколько '1','2','3' из столбца column1 при условии что если дата между одинаковыми значениями столбца column1 больше 10 секунд

Результат:

column1 count column2(минимальная из групировки по условию)
1 2 12-03-2022 14:57:01
2 1 12-03-2022 14:57:02
3 1 12-03-2022 14:58:01
2 1 12-03-2022 14:59:01
1 1 12-03-2022 14:59:41

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

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

Если я правильно понял вопрос, сделать можно так:

import pandas as pd

df = pd.read_csv("2.csv", parse_dates=[1]) # ваш файл с данными

df['diffs'] = df["column2"].diff().dt.seconds.fillna(0).gt(10).cumsum()
res = pd.DataFrame()

for i, g in df.groupby(["diffs", "column1"]):
    res = res.append({"column1":i[1], "count":len(g), "datetime":g["column2"]
                      .iloc[0]}, ignore_index=True).astype(int, errors="ignore")

получаем res:

   column1  count            datetime
0        1      2 2022-12-03 14:57:01
1        2      1 2022-12-03 14:57:02
2        3      1 2022-12-03 14:58:01
3        2      1 2022-12-03 14:59:01
4        1      1 2022-12-03 14:59:41

Довольно неуклюже, но ничего лучше на ум не приходит пока.

→ Ссылка