将 pandas 数据框日期列拆分为 start_date & end)date 按组

Split pandas dataframe date column into start_date & end)date by group

我有一个看起来像这样的数据框:

S.No  date          origin  dest    journeytype
1     2021-10-21    FKG      HYM    OP
2     2021-10-21    FKG      HYM    PK
3     2021-10-21    HYM      LDS    OP
4     2021-10-22    FKG      HYM    OP
5     2021-10-22    FKG      HYM    PK
6     2021-10-22    HYM      LDS    OP
7     2021-10-23    FKG      HYM    OP
8     2021-10-24    AVM      BLA    OP
9     2021-10-24    AVM      DBL    OP
10    2021-10-27    AVM      BLA    OP

我需要将各个出发地、目的地和旅程类型拆分为各个起点和 end_date 列。

上述输入的输出数据框应如下所示:

start_date  end_date   origin   dest    journeytype
2021-10-21  2021-10-23  FKG     HYM     OP
2021-10-21  2021-10-22  FKG     HYM     PK
2021-10-21  2021-10-22  HYM     LDS     OP
2021-10-24  2021-10-24  AVM     BLA     OP
2021-10-24  2021-10-24  AVM     DBL     OP
2021-10-27  2021-10-27  AVM     BLA     OP

此外,如果任何组的日期不连续,则它们需要在结果中显示为单独的记录

如有必要,将列转换为日期时间,然后按 GroupBy.agg 聚合 minmax,最后按列表更改列顺序:

df['date'] = pd.to_datetime(df['date'])

df = (df.groupby(['origin','dest','journeytype'], sort=False)['date']
        .agg(start_date='min', end_date='max')
        .reset_index())

df = df[['start_date', 'end_date','origin', 'dest', 'journeytype']]
print (df)
  start_date   end_date origin dest journeytype
0 2021-10-21 2021-10-23    FKG  HYM          OP
1 2021-10-21 2021-10-22    FKG  HYM          PK
2 2021-10-21 2021-10-22    HYM  LDS          OP
3 2021-10-24 2021-10-24    AVM  BLA          OP
4 2021-10-24 2021-10-24    AVM  DBL          OP
5 2021-10-24 2021-10-24    AVM  DKD          OP