判断DataFrame中每行最大值是否重复出现(向量化解法需求)
解决思路与代码实现
嘿,这个场景太常见了!针对你40000行、50列的大数据量,必须用向量化操作才能保证效率,绝对不能用逐行循环那种笨办法——不然等着卡到天荒地老吧😅
咱先明确需求:要判断Resultant_df里是否存在任意一行,其最大值在该行中重复出现(比如某行有两个或多个元素等于该行的最大值)。
一步到位的向量化实现
直接用Pandas的内置方法就能搞定,全是底层优化的向量化运算,速度拉满:
# 1. 计算每行的最大值 row_max = Resultant_df.max(axis=1) # 2. 统计每行中等于最大值的元素个数 max_count = (Resultant_df == row_max[:, None]).sum(axis=1) # 3. 判断是否存在行数满足条件(最大值出现次数>1) has_duplicate_max = (max_count > 1).any() # 输出结果 print("是否存在行内最大值重复的情况:", has_duplicate_max)
代码解释
Resultant_df.max(axis=1):向量化计算每行的最大值,返回一个和行数相同的Series,比循环快N倍。Resultant_df == row_max[:, None]:这一步是广播机制的妙用——把行最大值转换成列向量,和整个DataFrame做相等比较,得到一个布尔值的DataFrame,每个位置标记该元素是否等于该行最大值。.sum(axis=1):对每行的布尔值求和(True=1,False=0),得到每行最大值出现的次数。.any():只要有一行满足max_count > 1,就返回True,直接得到最终判断结果。
额外拓展:筛选目标行
如果你还想把这些有重复最大值的行单独提出来查看,也可以直接用:
# 筛选出所有行内最大值重复的行 duplicate_max_rows = Resultant_df[max_count > 1]
内容的提问来源于stack exchange,提问作者A H
相关产品推荐
相关产品推荐

