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

如何不重复遍历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]

示例运行结果

针对你提供的输入数据:

usernamenum_followersp
john7634
miki1042
rick20010

运行后输出结果完全符合预期:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:27:01