python - 检查每列中特定值的唯一性

标签 python pandas dataframe

假设我有一个 pandas.DataFrame df类似这样:

   A0  A1   A2
0   a   a    b
1   b   b    g 
2   c   b    h 
3   d   c  NaN

现在我想根据该 DataFrame 检查特定的值。让我们称呼他们

candidates = ["a", "b", "c", "g"]

对于每个候选人,我想检查它是否对我的 DataFrame 的每一列都是唯一的(它可能出现在多列中)。 这组候选人的期望输出将是一个带有

pd.DataFrame(
    [
        [
            cand,
            pd.magic(cand)
        ] for cand in candidates
    ],
    columns=["cand", "unique"]
)

>   cand  unique
  0    a    True
  1    b   False
  2    c    True
  3    g    True

更好的是 if 而不是 True它返回了匹配项的数量(即 [2, False, 2, 1] )。

我想我必须使用 pd.DataFrame.apply() ,但是我无法弄清楚如何只检查候选人或如何将每列的结果重新组合在一起。也许像 df.apply(pd.value_counts).T[cand] <= 1是一个很好的起点,它为每列提供一个带有 True 或 False 的 pd.Series。

最佳答案

让我们使用DataFrame.eq创建一个对应于每个候选人的 bool 掩码,然后使用 sum要获得每列中出现的总次数,最后使用 .lt + .all检查它是否在所有列中都是唯一的:

pd.DataFrame([{'cand': c, 'unique': df.eq(c).sum().lt(2).all()} for c in cand])

  cand  unique
0    a    True
1    b   False
2    c    True
3    g    True

关于python - 检查每列中特定值的唯一性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64155232/

相关文章:

python - excel单元格颜色读取和设置的差异

python - 如何删除包含相同值的 Pandas DataFrame 中的列

python - 修改数据框行 - Panda Python

使用另一个数据帧的行中的值替换一个数据帧的列中的所有值(按行名称列名称匹配),替换为字符

python - Pygame使一个对象追逐光标

python - 从列表中获取所有成对组合

python - 字符串 "integers"到占 "non-numeric"字符串的整数的列表 Python

python - 在 Python 中将路径附加到 LD_LIBRARY_PATH

python - 从 Webscrape 中过滤和格式化数据帧

python - 将数据框与从应用函数创建的另一个数据框合并?