Pandas如何基于日期列生成period标识(全局时间/ID分组双场景)
Pandas 时间间隔生成周期实现方案
前置准备
先将 datetime 列转换为 Pandas 时间格式,避免后续计算出错:
import pandas as pd # 构造示例数据 data = { "ID": [11, 11, 11, 12, 11], "datetime": [ "01-09-2021 10:00:00", "01-09-2021 10:15:15", "01-09-2021 15:00:00", "01-09-2021 15:10:00", "01-09-2021 18:00:00" ] } df = pd.DataFrame(data) # 转换为时间格式,匹配日-月-年的输入格式 df['datetime'] = pd.to_datetime(df['datetime'], format='%d-%m-%Y %H:%M:%S')
需求1:全局基于时间间隔生成period
直接计算所有行相邻时间差,超过2小时就标记为新周期起点,累计求和后加1得到从1开始的周期编号:
df['period'] = (df['datetime'].diff() > pd.Timedelta(hours=2)).cumsum() + 1
运行结果和给出的预期完全一致。
需求2:按ID分组后组内生成period
对ID列分组,在每个分组内单独计算时间差、生成独立的周期编号:
df['period'] = df.groupby('ID')['datetime'].transform( lambda x: (x.diff() > pd.Timedelta(hours=2)).cumsum() + 1 )
运行结果和给出的分组预期完全匹配。
内容的提问来源于stack exchange,提问作者NineWasps
相关产品推荐
相关产品推荐

