Python实现循环内呼叫号码的被叫号码交集查询
找出指定主叫号码对应的被叫号码交集
我来帮你搞定这个问题——要从大量通话记录里找出特定主叫号码对应的被叫号码交集,用Pandas就能轻松实现,我结合你的示例给你一步步说明:
步骤1:准备数据与导入库
首先确保你已经导入Pandas,然后可以先把示例数据转换成DataFrame(实际使用时直接读取你的数据源即可):
import pandas as pd # 示例数据(替换成你的实际数据) data = { 'Calling Number': ['023456738', '064785993', '087594937', '087594937', '023456738', '087594937'], 'Called Number': ['9123457583', '8804783937', '9123457583', '9278446356', '6547485959', '3547483946'], 'Seconds': [55, 125, 34, 33, 45, 23] } df = pd.DataFrame(data)
步骤2:定义目标主叫号码
把你需要查询交集的主叫号码列出来,比如示例里的两个号码:
target_callers = ['023456738', '087594937']
步骤3:计算被叫号码交集
这里有两种简洁的实现方式,都能高效处理数千条数据:
方式一:循环遍历目标主叫(直观易懂)
# 为每个目标主叫提取唯一的被叫号码集合 called_sets = {} for caller in target_callers: # 筛选当前主叫的所有被叫号码,去重后转成集合 called_numbers = df[df['Calling Number'] == caller]['Called Number'].unique() called_sets[caller] = set(called_numbers) # 计算所有集合的交集 common_called = set.intersection(*called_sets.values()) print("共同被叫号码:", common_called) # 输出:共同被叫号码: {'9123457583'}
方式二:用GroupBy优化(更简洁高效)
如果你的数据量很大,用GroupBy分组的方式会更高效:
# 按主叫号码分组,把每个主叫对应的被叫号码转成集合 caller_called_sets = df.groupby('Calling Number')['Called Number'].apply(set) # 筛选目标主叫的集合,直接求交集 common_called = set.intersection(*caller_called_sets.loc[target_callers]) print("共同被叫号码:", common_called)
关键注意事项
- 保留号码前导零:如果你的号码包含前导零(比如示例里的
023456738),读取数据时一定要指定字符串类型,避免前导零丢失:# 读取CSV时指定号码列的类型为字符串 df = pd.read_csv('your_call_data.csv', dtype={'Calling Number': str, 'Called Number': str}) - 处理重复数据:代码里用了
unique()或集合自动去重,确保每个被叫号码只计算一次,不影响交集结果。
内容的提问来源于stack exchange,提问作者Muhammad Nabiil
相关产品推荐
相关产品推荐

