Pandas如何判断DataFrame列值是否存在于另一列且不受顺序影响
问题原因
直接调用df1.isin(df2)时,pandas会默认按行索引对齐做逐元素匹配,而非判断值是否存在于目标列的全量取值集合中。当两个DataFrame同列的值排列顺序不一致、索引位置不匹配时,就会出现值实际存在却返回False的问题。
实现方式
不需要使用for循环,只需要将isin()的入参调整为df2对应列的值序列,就可以不受值顺序、行数差异影响完成判断:
import pandas as pd df1 = pd.DataFrame({'one': [2,4,6,8]}) df2 = pd.DataFrame({'one': [4,2,6,8,10]}) # 单指定列判断 print(df1['one'].isin(df2['one']))
运行后所有行均返回True,输出如下:
0 True 1 True 2 True 3 True Name: one, dtype: bool
如果需要保留DataFrame结构、支持多列同时判断,可直接传入对应列的Series对象:
# 全列匹配判断,自动按列名对应取值集合 print(df1.isin(df2['one']))
输出结果:
one 0 True 1 True 2 True 3 True
该方法完全适配df2取值数量多于df1的场景,判断逻辑仅校验值是否存在于对应列的取值集合中,和值的排列顺序、行索引位置无关。
内容的提问来源于stack exchange,提问作者Ash
相关产品推荐
相关产品推荐

