如何在pandas中判断两个列是否逻辑等价、指代同一内容
两列逻辑等价(一一映射)的验证方法
以下方法基于pandas实现,可快速校验大体积DataFrame的两列是否为一一对应的等价关系:
- 第一步:校验唯一值数量
两列如果是逻辑等价的一一映射,独立取值的数量一定完全一致,数量不等可直接排除等价可能,实现代码:
print(df['column_1'].nunique() == df['column_2'].nunique())
返回False则直接判定两列不等价。
- 第二步:双向映射唯一性校验
唯一值数量相等也可能存在多对一映射,需要分别校验两个方向的映射是否唯一:
# 校验每个column_1取值是否仅对应唯一的column_2取值 col1_to_col2 = df.groupby('column_1')['column_2'].nunique().max() == 1 # 校验每个column_2取值是否仅对应唯一的column_1取值 col2_to_col1 = df.groupby('column_2')['column_1'].nunique().max() == 1 print(col1_to_col2 & col2_to_col1)
返回True即可确认两列是严格的一一映射,仅用不同编码表示同一事物。
- 超大容量数据集提速方案
如果数据量超过千万行,可使用编码对比法大幅提升校验速度:
import pandas as pd print((pd.factorize(df['column_1'])[0] == pd.factorize(df['column_2'])[0]).all())
该方法会将两列按取值出现的顺序编码为整数,编码结果完全一致就说明两列等价。
注意:如果两列存在空值,建议先按业务规则剔除空值行再校验,避免空值统计干扰结果。
内容的提问来源于stack exchange,提问作者MehmedB
相关产品推荐
相关产品推荐

