Группировка по условию
Привет есть массив данных.
| 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
Довольно неуклюже, но ничего лучше на ум не приходит пока.