【问题标题】:Pandas: create a period based on date column熊猫:根据日期列创建一个时期
【发布时间】:2021-09-10 18:21:37
【问题描述】:

我有一个数据框

ID              datetime 
11              01-09-2021 10:00:00
11              01-09-2021 10:15:15
11              01-09-2021 15:00:00
12              01-09-2021 15:10:00
11              01-09-2021 18:00:00

如果时间增加到 2 小时,我需要添加仅基于日期时间的时间段

ID              datetime                 period
11              01-09-2021 10:00:00        1
11              01-09-2021 10:15:15        1
11              01-09-2021 15:00:00        2
12              01-09-2021 15:10:00        2
11              01-09-2021 18:00:00        3

同样的事情,但基于 ID 和日期时间

ID              datetime                 period
11              01-09-2021 10:00:00        1
11              01-09-2021 10:15:15        1
11              01-09-2021 15:00:00        2
12              01-09-2021 15:10:00        1
11              01-09-2021 18:00:00        3

我该怎么做?

【问题讨论】:

    标签: pandas datetime


    【解决方案1】:

    您可以通过Series.diff 获得差异,转换为小时Series.dt.total_seconds,比较2 并添加累计和:

    df['period'] = df['datetime'].diff().dt.total_seconds().div(3600).gt(2).cumsum().add(1)
    print (df)
       ID            datetime  period
    0  11 2021-01-09 10:00:00       1
    1  11 2021-01-09 10:15:15       1
    2  11 2021-01-09 15:00:00       2
    3  12 2021-01-09 15:10:00       2
    4  11 2021-01-09 18:00:00       3
    

    每个组的相似想法:

    f = lambda x: x.diff().dt.total_seconds().div(3600).gt(2).cumsum().add(1)
    df['period'] = df.groupby('ID')['datetime'].transform(f)
    print (df)
       ID            datetime  period
    0  11 2021-01-09 10:00:00       1
    1  11 2021-01-09 10:15:15       1
    2  11 2021-01-09 15:00:00       2
    3  12 2021-01-09 15:10:00       1
    4  11 2021-01-09 18:00:00       3
    

    【讨论】:

    • 但它只检查相邻字符串之间的差异。我的意思是在 2 小时后添加一个新的时间段。例如从 2021-01-09 10:00:00 到 2021-01-09 12:00:00 - 期间 1、2021-01-09 12:00:00 到 2021-01-09 14:00:00 -第 2 期等
    猜你喜欢
    • 2023-03-08
    • 2021-08-30
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 2017-11-03
    相关资源
    最近更新 更多