如何筛选在不同id列分组中重复出现的to列值?
高效查找跨不同id分组存在的to值
给定如下数据集(包含id和to两列):
id to 0 1 0x954b890704693af242613edef1b603825afcd708 1 1 0x954b890704693af242613edef1b603825afcd708 2 1 0x607f4c5bb672230e8672085532f7e901544a7375 3 1 0x9b9647431632af44be02ddd22477ed94d14aacaa 4 2 0x9b9647431632af44be02ddd22477ed94d14aacaa
需求是找出在不同id分组中都存在的to值,示例中符合条件的只有0x9b9647431632af44be02ddd22477ed94d14aacaa。
当前使用嵌套循环实现的代码如下:
for index, row in df.iterrows(): to=row['to'] id=row['id'] for index, row in df.iterrows(): if row['to']==to and row['id']!=id: print(to)
更高效的实现方法
嵌套循环的时间复杂度为O(n²),数据量较大时效率极低。可以利用pandas的向量化操作优化,步骤如下:
- 统计数据集中总共有多少个唯一的
id - 对每个
to值,统计它对应的唯一id数量 - 筛选出唯一
id数量等于总唯一id数的to值
代码实现:
import pandas as pd # 假设df是你的数据集 # 1. 获取总唯一id数量 total_unique_ids = df['id'].nunique() # 2. 按to分组,统计每个to对应的唯一id数 to_id_counts = df.groupby('to')['id'].nunique() # 3. 筛选出符合条件的to值 result = to_id_counts[to_id_counts == total_unique_ids].index.tolist() print(result)
这段代码的时间复杂度远低于嵌套循环,处理大数据集时优势明显。如果需求是找出至少在两个不同id中存在的to值,只需把判断条件改为to_id_counts >= 2即可。
内容的提问来源于stack exchange,提问作者Gloria Dalla Costa
相关产品推荐
相关产品推荐

