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

如何在Pandas中筛选指定时间范围重复项:找出1小时内通话≥3次的手机号

解决方案

针对你要找出1小时内拨打3次及以上电话的手机号需求,以下是适合新手的分步实现方案:

1. 转换时间列格式

首先必须将"Date Time"列转为pandas可识别的datetime类型,否则无法进行时间范围计算:

import pandas as pd

# 加载你的数据(如果是Excel就用pd.read_excel,根据实际数据源调整)
df = pd.read_csv("your_data_file.csv")

# 自动识别时间格式并转换,infer_datetime_format参数能提升大文件的处理速度
df["Date Time"] = pd.to_datetime(df["Date Time"], infer_datetime_format=True)

2. 按手机号分组并排序

按手机号分组后,确保每个手机号的通话记录是按时间顺序排列的,这是后续时间窗口计算的基础:

# 先按手机号、时间排序,再分组(group_keys=False避免额外的分组索引)
df_sorted = df.sort_values(["Phone No", "Date Time"]).groupby("Phone No", group_keys=False).apply(lambda x: x)

3. 统计1小时内的通话次数

使用pandas的滚动时间窗口功能,统计每个通话时间点往前1小时内的总通话次数,筛选出次数≥3的记录:

# 对每个手机号的时间列,用1小时窗口统计窗口内的记录数
df_sorted["1h_call_count"] = df_sorted.groupby("Phone No")["Date Time"].rolling(window="1h", closed="left").count().reset_index(level=0, drop=True)

# 筛选出所有1小时内通话≥3次的记录
filtered_records = df_sorted[df_sorted["1h_call_count"] >= 3]

# 提取所有符合条件的唯一手机号
target_phones = filtered_records["Phone No"].unique()

关键参数说明

  • window="1h":设置滚动窗口的时间跨度为1小时
  • closed="left":表示窗口包含左边界(即当前时间点不算入窗口,只统计之前1小时内的记录;如果需要包含当前时间,改为closed="both"即可)
  • 该方法针对大数量级数据(30万条)优化过,效率优于逐条对比的方式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 14:03:22