【问题标题】:Split pandas dataframe date column into start_date & end)date by group按组将 pandas 数据框日期列拆分为 start_date 和 end)date
【发布时间】:2021-12-08 01:39:22
【问题描述】:

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

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

我需要将单独的出发地、目的地和旅程类型拆分为单独的开始日期和结束日期列。

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

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

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

【问题讨论】:

    标签: python pandas dataframe pandas-groupby


    【解决方案1】:

    如有必要,将列转换为日期时间,然后按 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
    

    【讨论】:

    • 它有效,但它正在将 origin、dest 和 hourneytype 合并到索引中。有没有办法将它们也作为一列?
    • @Mohan - 添加.reset_index()
    • 我已经对问题进行了编辑,是否有一种方法可以处理缺失的日期。请参见我的示例中的第 8 行和第 10 行。如果中间缺少几天,我可能需要将它们作为我的记录中的 2 行。
    • @Mohan - 抱歉,有点忙。
    猜你喜欢
    • 2016-06-24
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    • 2014-09-27
    • 2021-12-08
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    相关资源
    最近更新 更多