#python #pandas #dataframe
Вопрос:
У меня есть фрейм данных pandas, который выглядит так:
Текстовый формат:
| date | org | des | j_type ---- ------------ ----- ----- -------- 0 | 2021-10-27 | FKG | HYM | OP 1 | 2021-10-27 | FKG | HYM | PK 2 | 2021-10-27 | HYM | LDS | OP 3 | 2021-10-28 | FKG | HYM | OP 4 | 2021-10-28 | FKG | HYM | PK ... : ... : ... : ... : ... 870 | 2022-04-07 | TBY | MBR | OP 871 | 2022-04-08 | FKG | HYM | OP 872 | 2022-04-08 | FKG | HYM | PK 873 | 2022-04-08 | MBR | TBY | PK 874 | 2022-04-08 | TBY | MBR | OP
Я хочу сгруппировать по org
, des
amp; j_type
и объединить последовательные даты в одну строку, разделенную на 2 столбца start_date
amp; end_date
Это то, что я пытался:
import pandas as pd df = pd.read_csv('~/Desktop/m1.csv') # orignal Df df['date'] = pd.to_datetime(df['date']) group = df.groupby(['org', 'des', 'j_type'])['date'].diff().dt.days.gt(1).cumsum() result = (df.groupby(['org', 'des', 'j_type', group], sort=False)['date'].agg(start_date='min', end_date='max').reset_index())
что дает мне такой результат, как:
Однако это неправильно группирует результаты и создает 2 отдельные строки даже для последовательных дат.
Комментарии:
1. Пожалуйста, можете ли вы обновить образец в виде простого текста, чтобы ваш код был воспроизводимым?