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

如何用Pandas匹配Zoom参会时间区间并生成有效参会场次新列

Pandas实现Zoom参会有效场次匹配方案

实现思路

  • 先拆分会议场次的时间区间为独立的开始、结束时间字段,统一转换所有时间字段为datetime格式
  • 关联参会记录与全量会议场次,计算每条参会记录和每场会议的重叠时长
  • 按参会者+场次维度聚合总停留时长,过滤掉总时长不足10分钟的场次
  • 按参会者ID聚合,得到每人的有效参会场次列表

完整实现代码

import pandas as pd

# ---------------------- 1. 构造样例数据 ----------------------
# 会议场次表
session_df = pd.DataFrame({
    "Session": ["Apples", "Oranges", "Pineapples"],
    "Time": ["8:00-8:30", "8:30-9:00", "9:00-9:30"]
})
# 拆分场次时间为开始、结束时间,转datetime格式
session_df[["session_start", "session_end"]] = session_df["Time"].str.split("-", expand=True)
session_df["session_start"] = pd.to_datetime(session_df["session_start"])
session_df["session_end"] = pd.to_datetime(session_df["session_end"])

# 参会记录表(可替换为实际读取的数据源)
attend_df = pd.DataFrame({
    "Participant": ["U001", "U001", "U002", "U003"],
    "Join Time": ["8:05", "8:40", "8:20", "8:55"],
    "Leave Time": ["8:35", "9:20", "8:28", "9:35"]
})
# 转换入会/退会时间为datetime格式
attend_df["Join Time"] = pd.to_datetime(attend_df["Join Time"])
attend_df["Leave Time"] = pd.to_datetime(attend_df["Leave Time"])

# ---------------------- 2. 匹配场次计算重叠时长 ----------------------
# 交叉连接:每条参会记录匹配所有会议场次
cross_df = attend_df.merge(session_df, how="cross")

# 计算重叠时间区间
cross_df["overlap_start"] = cross_df[["Join Time", "session_start"]].max(axis=1)
cross_df["overlap_end"] = cross_df[["Leave Time", "session_end"]].min(axis=1)

# 过滤无重叠的匹配结果
cross_df = cross_df[cross_df["overlap_start"] < cross_df["overlap_end"]].copy()

# 计算单条记录重叠时长(单位:分钟)
cross_df["overlap_min"] = (cross_df["overlap_end"] - cross_df["overlap_start"]).dt.total_seconds() / 60

# ---------------------- 3. 按规则过滤并聚合结果 ----------------------
# 按参会者+场次分组,统计单场累计停留时长
valid_session = cross_df.groupby(["Participant", "Session"], as_index=False)["overlap_min"].sum()
# 过滤停留时长不足10分钟的无效场次
valid_session = valid_session[valid_session["overlap_min"] >= 10]

# 按参会者ID聚合,得到有效场次列表
result = valid_session.groupby("Participant")["Session"].agg(list).reset_index()
result.rename(columns={"Session": "Engaged Sessions"}, inplace=True)

print(result)

样例输出说明

以上述测试数据为例,最终输出结果如下:

ParticipantEngaged Sessions
U001['Apples', 'Oranges', 'Pineapples']
U003['Pineapples']

说明:U002在Apples场次仅停留8分钟,不符合规则不计入结果

内容的提问来源于stack exchange,提问作者Denisse

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:18:02