我有一个数据框:
In [47]: df
Out[47]:
uid a b
0 111 1 2
1 111 2 3
2 111 4 5
3 111 6 7
4 111 5 8
5 222 0 9
6 222 11 12
7 222 13 11
8 222 2 1
9 333 14 16
10 333 3 2
11 333 16 19
12 333 3 4
13 444 21 20
14 444 9 5
15 444 20 24
16 444 5 6
我想检查
b
中的值是否存在于 a
中,反之亦然,仅当 uid
相同时。我使用了
isin
:df[(df.b.isin(df.a))|(df.a.isin(df.b))]
但这会贯穿所有值,并没有给我想要的输出。
期望的输出:
Out[49]:
uid a b
0 111 1 2
1 111 2 3
2 111 4 5
4 111 5 8
6 222 11 12
7 222 13 11
9 333 14 16
11 333 16 19
13 444 21 20
14 444 9 5
15 444 20 24
16 444 5 6
最佳答案
我认为您需要 groupby
并应用 boolean indexing
:
print (df.groupby('uid').apply(lambda x: x[(x.b.isin(x.a))|(x.a.isin(x.b))]))
uid a b
uid
111 0 111 1 2
1 111 2 3
2 111 4 5
4 111 5 8
222 6 222 11 12
7 222 13 11
333 9 333 14 16
11 333 16 19
444 13 444 21 20
14 444 9 5
15 444 20 24
16 444 5 6
print (df.groupby('uid')
.apply(lambda x: x[(x.b.isin(x.a))|(x.a.isin(x.b))])
.reset_index(drop=True))
uid a b
0 111 1 2
1 111 2 3
2 111 4 5
3 111 5 8
4 222 11 12
5 222 13 11
6 333 14 16
7 333 16 19
8 444 21 20
9 444 9 5
10 444 20 24
11 444 5 6
关于python - 复杂的 Pandas isin 函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40217043/