python - 复杂的 pandas isin 函数

标签 python pandas

我有一个数据框:

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/

相关文章:

python - 在 pandas 绘图中包含每个数据点的标签

python - pandas 中的 set_value 和 = 有什么区别

python - 使情节在 IE 中可见

pandas - '<' not supported between instances of ' 日期时间.日期' 和 'str'

python - 在 pandas 数据框中查找连续段

python - pandas groupby 总结两列之间的差异并获得每组的平均值

javascript - 如何将经度和纬度转换为街道地址

python - 如何创建一个 os.walk() 函数来比较两个目录的文件夹和子文件夹?

python - pycurl: RETURNTRANSFER 选项不存在

python - 使用 Django 导入语句