Pandas:基于日期列创建一个周期



我有一个数据框架

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小时,我需要根据datetime添加周期

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和datetime

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

我该怎么做呢?

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

最新更新