如何在Pandas DataFrame中校验多列值是否相等?
实现DataFrame每行多列值相等的校验
嘿,这个需求其实很常见,不管是3列还是20列,都有简洁高效的实现方式,我给你分享两种常用方法:
方法一:利用nunique()统计每行唯一值数量
nunique(axis=1)会计算每行的唯一值个数,如果所有列值相等,唯一值数量就是1,我们只需要判断这个数量是否等于1即可:
import pandas as pd from pandas import DataFrame # 你的示例数据 data = [[10,10,10],[12,12,12],[10,12,10]] df = DataFrame(data,columns=['Col1','Col2','Col3']) # 校验每行所有列值是否相等 check_result = df.nunique(axis=1) == 1 print(check_result.values) # 输出:[ True True False]
如果你的20列里有部分列不需要校验,只需要指定列名即可,比如:
# 假设只需要校验Col1到Col20中的前15列 target_cols = [f'Col{i}' for i in range(1,16)] check_result = df[target_cols].nunique(axis=1) == 1
方法二:利用eq()逐列对比+all()校验
我们可以拿每行的第一列值作为基准,和其他所有列逐行对比,再检查每行是否所有对比结果都为True:
# 以第一列为基准,对比所有列 check_result = df.eq(df.iloc[:, 0], axis=0).all(axis=1) print(check_result.values) # 输出:[ True True False]
这种方法的优势是逻辑直观,如果你想换其他列作为基准,只需要修改iloc[:, 0]的索引即可,比如iloc[:, 5]就是拿第6列做基准。
这两种方法处理20列的数据集都完全没问题,运行效率也很高,你可以根据自己的习惯选择~
内容的提问来源于stack exchange,提问作者Sharvari Gc
相关产品推荐
相关产品推荐

