以下是一个示例代码,用于将用户活动按照连续时间分组:
from datetime import datetime, timedelta
def group_activities_by_time(activities):
groups = []
current_group = [activities[0]] # 创建第一个分组
for i in range(1, len(activities)):
current_activity = activities[i]
previous_activity = activities[i-1]
current_time = datetime.strptime(current_activity['time'], '%Y-%m-%d %H:%M:%S')
previous_time = datetime.strptime(previous_activity['time'], '%Y-%m-%d %H:%M:%S')
time_difference = current_time - previous_time
# 判断当前活动和前一个活动是否连续
if time_difference <= timedelta(hours=1):
current_group.append(current_activity)
else:
groups.append(current_group)
current_group = [current_activity] # 创建新的分组
groups.append(current_group) # 添加最后一个分组
return groups
# 示例数据
activities = [
{'activity': 'A', 'time': '2022-01-01 10:00:00'},
{'activity': 'B', 'time': '2022-01-01 11:00:00'},
{'activity': 'C', 'time': '2022-01-01 14:00:00'},
{'activity': 'D', 'time': '2022-01-01 15:00:00'},
{'activity': 'E', 'time': '2022-01-01 16:00:00'},
{'activity': 'F', 'time': '2022-01-01 18:00:00'},
]
groups = group_activities_by_time(activities)
for group in groups:
print(group)
输出结果为:
[{'activity': 'A', 'time': '2022-01-01 10:00:00'}, {'activity': 'B', 'time': '2022-01-01 11:00:00'}]
[{'activity': 'C', 'time': '2022-01-01 14:00:00'}, {'activity': 'D', 'time': '2022-01-01 15:00:00'}, {'activity': 'E', 'time': '2022-01-01 16:00:00'}]
[{'activity': 'F', 'time': '2022-01-01 18:00:00'}]
该示例代码通过比较当前活动和前一个活动的时间差,将连续的活动分为同一组。时间差小于等于1小时的活动被视为连续活动。每次遇到不连续的活动时,将当前分组添加到结果列表中,并创建一个新的空分组。最后,将最后一个分组添加到结果列表中。