首页 文章

检查两列之间的一对一关系

提问于
浏览
0

我在pandas数据帧中有两列A和B,其中值重复多次 . 对于A中的唯一值,B预计也具有“另一个”唯一值 . 并且A的每个唯一值在B中具有对应的唯一值(参见下面的示例,以两个列表的形式) . 但由于每列中的每个值都重复多次,我想检查两列之间是否存在任何一对一的关系 . 在熊猫中有任何内置功能来检查吗?如果没有,是否有一种有效的方法来完成这项任务?

例:

A = [1, 3, 3, 2, 1, 2, 1, 1]
B = [5, 12, 12, 10, 5, 10, 5, 5]

这里,对于A中的每个1,B中的对应值总是5,而没有别的 . 同样,2 - > 10,3 - > 12 . 因此,A中的每个数字在B中只有一个/唯一的对应数字(而没有其他数字) . 我称这种一对一的关系 . 现在我想检查pandas dataframe中两列之间是否存在这种关系 .

不满足此关系的示例:

A = [1, 3, 3, 2, 1, 2, 1, 1]
B = [5, 12, 12, 10, 5, 10, 7, 5]

这里,A中的1在B中没有唯一的对应值 . 它具有两个对应的值 - 5和7.因此,不满足该关系 .

1 回答

  • 1

    考虑一下你有一些数据帧:

    d = df({'A': [1, 3, 1, 2, 1, 3, 2], 'B': [4, 6, 4, 5, 4, 6, 5]})
    

    dgroupby 方法,返回GroupBy object . 例如,这是通过相等列值对某些行进行分组的接口 .

    gb = d.groupby('A')
     grouped_b_column = gb['B']
    

    在分组的行上,您可以执行聚合 . 让我们在每个组中找到最小值和最大值 .

    res = grouped_b_column.agg([np.min, np.max])
    
    >>> print(res)
       amin  amax
    A            
    1     4     4
    2     5     5
    3     6     6
    

    现在我们应该检查 aminamax 在每个组中是否相等,因此每个组都包含相等的 B 字段:

    res['amin'].equals(res['amax'])
    

    如果此检查没问题,那么对于每个 A ,您都有唯一的 B . 现在,您应该检查 AB 列交换的相同条件 .

相关问题