为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕斯709654 2021-09-11 10:04:25
我在熊猫数据框中有两列 A 和 B,其中的值重复多次。对于 A 中的唯一值,B 也有望具有“另一个”唯一值。并且A的每个唯一值在B中都有一个对应的唯一值(参见下面两个列表形式的示例)。但是由于每列中的每个值都重复多次,我想检查两列之间是否存在任何一对一的关系。Pandas 中是否有任何内置函数来检查?如果没有,是否有一种有效的方法来完成这项任务?例子: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 中只有一个/唯一对应的数字(没有其他数字)。我称之为一对一的关系。现在我想检查熊猫数据框中的两列之间是否存在这种关系。不满足此关系的示例:A = [1, 3, 3, 2, 1, 2, 1, 1]B = [5, 12, 12, 10, 5, 10, 7, 5]这里,A 中的 1 在 B 中没有唯一对应值。它有两个对应值 - 5 和 7。因此,不满足关系。
查看完整描述

1 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

考虑你有一些数据框:


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

dhasgroupby方法,它返回GroupByobject。例如,这是按相等的列值对某些行进行分组的界面。


 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

现在我们只需要检查amin和amax在每个组中是否相等,因此每个组都由相等的B字段组成:


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

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


查看完整回答
反对 回复 2021-09-11
  • 1 回答
  • 0 关注
  • 140 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信