提问者:小点点

如何检查一列的每个值是否正好映射到另一列中的一个值?


我有一个像这样的数据帧

import pandas as pd

df = pd.DataFrame({'A':list('bbcddee'), 'B': list('klmnnoi')})

   A  B
0  b  k
1  b  l
2  c  m
3  d  n
4  d  n
5  e  o
6  e  i

我想从列ab创建一个字典,使用例如。

dict(zip(df.A, df.B))

在做这件事之前,我想检查一下a中的每个值是否只映射到b中的一个值; 如果不是,则应引发错误; 上述情况并非如此,因为B映射到KL,而E映射到OI

一种解决办法是:

df[df.groupby('A')['B'].transform(lambda x: len(set(x))) > 1]

返回

   A  B
0  b  k
1  b  l
5  e  o
6  e  i

但是,这需要一个lambda,这可能会使它变慢。 有没有人看到加快速度的选择?


共1个答案

匿名用户

如果keep参数设置为false,则可以使用pd.series.duplicateddf.duplicated

df[df.A.duplicated(keep=False) & (~df.duplicated(keep=False))]

   A  B
0  b  k
1  b  l
5  e  o
6  e  i