Python中多列按行查找重复值并生成标记列的报错解决
解决方案
错误原因
- 原代码中
duplicated(keep=False)是判断整行是否与其他行重复,并非你需要的「行内列值重复」逻辑,完全偏离需求。 if W_Interest[W_Interest.duplicated(keep=False)]:试图将DataFrame直接作为布尔条件判断,DataFrame的真值无法直接确定,导致抛出ValueError。
修正代码
# 提取所有以OEInterestTraceData开头的列(用startswith比contains更精准匹配开头) W_Interest = loaddata1.loc[:, loaddata1.columns.str.startswith('OEInterestTraceData')] # 生成dummy标记列 if len(W_Interest.columns) <= 1: # 仅1列时无重复可能,直接标记0 W_Interest['dummy'] = 0 else: # 每行计算唯一值数量,若小于列数则说明行内存在重复,标记为1;否则为0 W_Interest['dummy'] = (W_Interest.nunique(axis=1) < W_Interest.shape[1]).astype(int)
逻辑说明
- 用
str.startswith精准匹配以指定字符串开头的列,避免contains匹配到列名中间包含该字符串的情况。 - 当目标列数≤1时,行内不可能有重复值,直接赋值0。
- 当列数>1时,
nunique(axis=1)计算每行的唯一值数量,若该数量小于列数,说明行内存在重复值,转换为整数类型后得到1/0的标记。
内容的提问来源于stack exchange,提问作者Asif Sayed
相关产品推荐
相关产品推荐

