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

如何确保指定值集合内的每个值在pandas DataFrame每行中仅出现一次

你现有实现存在一处逻辑错误:return True 的缩进层级错误,只会校验第一行数据就返回结果,不会执行后续行的校验逻辑。

更简洁高效的向量化实现方案如下,完全避免Python层的逐行遍历,数据量越大性能优势越突出:

import pandas as pd

def check(data, values):
    # 过滤出待校验的值,其他值替换为空
    filter_df = data.where(data.isin(values), pd.NA)
    # 逐行对比非空唯一值数量和非空值总数量,全相等则校验通过
    return (filter_df.nunique(axis=1) == filter_df.count(axis=1)).all()

测试验证:

VALUES = [1, 2]
df_no = pd.DataFrame(
    {
        "a": [1, 2],
        "b": [1, 2],
    }
)
df_yes = pd.DataFrame(
    {
        "a": [1, 2],
        "b": [2, 4],
        "c": [3, 1],
    }
)

print(check(df_no, VALUES)) # 输出 False
print(check(df_yes, VALUES)) # 输出 True

实现逻辑说明:

  • 第一步先把所有不属于待校验集合的元素替换为空值,排除无关元素的干扰
  • 第二步按行统计两个值:非空唯一值的数量、非空值的总数量。如果某行两个值不相等,说明该行内存在待校验集合的重复值
  • 最后用all()判断所有行都满足校验条件,是则返回True,否则返回False

内容的提问来源于stack exchange,提问作者baxx

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:18:04