为何pd.Series.isin()判定的序列相似度与实际不符?
问题根源:误解了
isin()的工作逻辑 你之所以觉得结果“多了两个True”,是因为把isin()的作用和「统计唯一共同值数量」或者「按位置匹配元素」搞混啦!
先明确isin()的核心逻辑:
series1.isin(series2)会逐个检查series1里的每个元素,只要这个元素在series2的所有值中存在(不管出现多少次),就返回True——它不关心元素在series2里的位置,也不统计唯一值的数量。
针对你的例子具体分析:
看series2的元素,里面明确包含'No'(比如series2的索引1、4、6都是'No')。所以series1里索引2、3的'No',只要series2里有至少一个'No',isin()就会返回True,这完全符合方法的设计预期。
你提到的“实际仅存在11个共同值”,应该是在数唯一的共同元素,但isin()的结果是逐个元素的匹配状态,不是唯一值的统计。
如果你的需求不是逐个元素检查存在性,而是其他场景:
- 想找位置对应且值相等的元素:用
series1 == series2,这时候索引2、3会返回False(因为series2的索引2、3是'Yes',和series1的'No'不匹配),这可能是你原本预期的结果,但这是位置匹配逻辑,和isin()的功能完全不同。 - 想统计唯一共同值的数量:用
len(pd.intersect1d(series1, series2)),这个会返回8(两个Series的唯一共同值为:'risk no'、'No'、'Yes'、'Medium rare'、'Female'、'$25,000 - $49,999'、'High school degree'、'South Atlantic')。
内容的提问来源于stack exchange,提问作者VanillaChoco441
相关产品推荐
相关产品推荐

