You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:基于时间间隔对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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 00:25:31