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

我在熊猫数据框中有两列 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。因此,不满足关系。


慕斯709654
浏览 141回答 1
1回答

哈士奇WWW

考虑你有一些数据框: 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  amaxA            1     4     42     5     53     6     6现在我们只需要检查amin和amax在每个组中是否相等,因此每个组都由相等的B字段组成:res['amin'].equals(res['amax'])如果这个检查没问题,那么对于每个A你都有唯一的B. 现在您应该检查A和B列交换的相同条件。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python