求助:基于时间间隔对DataFrame中同城市VIP到访记录分组
解决方案
步骤1:准备数据并转换时间格式
首先将字符串类型的datetime列转为pandas时间类型,这是计算时间间隔的前提:
import pandas as pd # 构造示例DataFrame data = { 'City': ['New York']*5, 'datetime': [ '2022-12-06 10:37:25', '2022-12-06 10:42:34', '2022-12-06 10:47:12', '2022-12-06 10:52:10', '2022-12-06 02:37:25' ] } df = pd.DataFrame(data) # 转换为时间类型 df['datetime'] = pd.to_datetime(df['datetime'])
步骤2:生成时间分组标识
按城市分组后,先对时间排序,再计算相邻记录的时间差,通过时间差是否超过10分钟来生成分组ID:
# 按城市和时间排序,确保时间顺序正确 df = df.sort_values(['City', 'datetime']) # 计算每组内相邻时间的差值 df['time_diff'] = df.groupby('City')['datetime'].diff() # 当时间差超过10分钟时,新建一个分组,用累加生成组ID df['group_id'] = (df['time_diff'] > pd.Timedelta(minutes=10)).cumsum()
步骤3:按城市+分组ID聚合结果
最后通过City和group_id分组,统计每组的记录数并收集时间字符串列表:
# 聚合计算分组数量和时间列表 result = df.groupby(['City', 'group_id']).agg( count=('datetime', 'size'), datetime=('datetime', lambda x: x.dt.strftime('%Y-%m-%d %H:%M:%S').tolist()) ).reset_index(drop=True) # 查看结果 print(result)
输出结果
City count datetime 0 New York 1 [2022-12-06 02:37:25] 1 New York 4 [2022-12-06 10:37:25, 2022-12-06 10:42:34, 2022-12-06 10:47:12, 2022-12-06 10:52:10]
内容的提问来源于stack exchange,提问作者Star Lord
相关产品推荐
相关产品推荐

