如何不重复遍历Pandas DataFrame行,避免重复配对并简化嵌套判断
Pandas DataFrame行对关联遍历优化方案
核心优化思路
- 采用
itertools.combinations生成无重复的两两行对,自动过滤自配对、双向重复配对,时间复杂度从O(n²)降至O(n(n-1)/2),执行效率直接提升一倍 - 提前独立生成
nfollower_dict,无需嵌套循环中重复赋值,避免冗余操作 - 依靠组合生成的固定顺序统一键名规则,完全消除所有嵌套if/else判断
完整实现代码
import itertools import pandas as pd # 提前生成粉丝数字典,一行搞定,无需循环处理 nfollower_dict = df_hashtag.set_index('username')['num_followers'].to_dict() # 生成用户与p值的对应关系 user_p = df_hashtag.set_index('username')['p'].to_dict() user_list = list(user_p.keys()) user_dict = {} # 生成所有无重复的两两组合 for u1, u2 in itertools.combinations(user_list, 2): user_dict[f"{u1}-{u2}"] = user_p[u1] + user_p[u2]
示例运行结果
针对你提供的输入数据:
| username | num_followers | p |
|---|---|---|
| john | 76 | 34 |
| miki | 10 | 42 |
| rick | 200 | 10 |
运行后输出结果完全符合预期:
user_dict = { "john-miki": 76, "john-rick": 44, "miki-rick": 52 } nfollower_dict = { "john": 76, "miki": 10, "rick": 200 }
大数据量优化方案
如果DataFrame数据量超过10万行,可以改用Pandas向量化操作,避免Python层循环进一步提升效率:
import numpy as np users = df_hashtag['username'].values p_vals = df_hashtag['p'].values # 生成上三角索引,避免重复配对 idx = np.triu_indices(len(users), k=1) pairs = np.stack([users[idx[0]], users[idx[1]]], axis=1) sums = p_vals[idx[0]] + p_vals[idx[1]] user_dict = {f"{u1}-{u2}": s for u1,u2,s in zip(pairs[:,0], pairs[:,1], sums)}
内容的提问来源于stack exchange,提问作者Minitorr
相关产品推荐
相关产品推荐

