假设我有一个 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/