我有一个像这样的数据帧
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
我想从列a
和b
创建一个字典,使用例如。
dict(zip(df.A, df.B))
在做这件事之前,我想检查一下a
中的每个值是否只映射到b
中的一个值; 如果不是,则应引发错误; 上述情况并非如此,因为B
映射到K
和L
,而E
映射到O
和I
。
一种解决办法是:
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
,这可能会使它变慢。 有没有人看到加快速度的选择?
如果keep
参数设置为false
,则可以使用pd.series.duplicated
和df.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