首页 > 解决方案 > 根据两列的组合过滤 Pandas 数据框

问题描述

假设我有一个数据框,

   a  b
0  1  2
1  2  3
2  4  2
3  4  3

我想过滤数据框,以便得到结果,

   a  b
0  1  2
3  4  3

即,我想要组合(1,2)(4,3)通过将两列过滤在一起。

如果我试试这个,

df1 = df[df['a'].isin([1,4]) & df['b'].isin([2,3])]

我得到了整个数据框,因为 和 的组合(1,3)(4,2)包含在上述方法中。但我只需要给定的组合。我有一个巨大的两列元组列表,我想根据相应的元组组合过滤数据框。

另外,我不想将两列合并为一个字符串然后过滤。

标签: pythonpandas

解决方案


利用 -

df[df[['a', 'b']].apply(tuple, axis=1).isin([(1,2), (4,3)])]

输出

    a   b
0   1   2
3   4   3

解释

df[['a', 'b']].apply(tuple, axis=1)给出一系列元组 -

0    (1, 2)
1    (2, 3)
2    (4, 2)
3    (4, 3)

.isin([(1,2), (4,3)])搜索所需的元组并给出一个布尔系列


推荐阅读