如何在Pandas中实现__contains__矢量化版本并输出DataFrame结果
Pandas判断DataFrame元素是否属于指定集合的最优方案
你创建了如下Pandas DataFrame和有效元素元组:
import pandas as pd a = pd.DataFrame([["x", "y", "z"], ["y", "x", "z"]]) valid = ("x", "y")
尝试用print(a in valid)判断元素是否属于valid时无法生效,你需要得到和原DataFrame结构一致的布尔值结果:
0 1 2 0 True True False 1 True True False
你当前使用np.logical_or.reduce(a == v for v in valid)能实现判断,但返回的是numpy数组而非DataFrame。这里推荐更优的Pandas原生方案:
直接使用isin()方法,这是Pandas专门为判断元素是否属于集合设计的API,会直接返回结构完全匹配的布尔DataFrame:
result = a.isin(valid) print(result)
运行后输出就是你期望的结果:
0 1 2 0 True True False 1 True True False
这个方案比numpy的方式更简洁,完全基于Pandas原生实现,不需要额外的numpy逻辑处理,同时直接保留原DataFrame的索引和列结构。
内容的提问来源于stack exchange,提问作者Luis
相关产品推荐
相关产品推荐

