查找其中显示特定值的所有组

时间:2019-11-19 01:07:58

标签: python pandas

我是Python和Pandas的新手。我有以下DataFrame:

import pandas as pd

df = pd.DataFrame( {'a':['A','A','B','B','B','C','C','C'], 'b':[1,3,1,2,3,1,3,3]})

    a   b
0   A   1
1   A   3
2   B   1
3   B   2
4   B   3
5   C   1
6   C   3
7   C   3

我想创建一个新的DataFrame,其中仅显示A列中b列中值为1和2的组,即:

    a   b
0   B   1
1   B   2
2   B   3

我知道我们可以使用df.groupby('a')创建组,并且方法df.all()与此相关,但我自己无法弄清楚。看起来应该很简单。有帮助吗?

2 个答案:

答案 0 :(得分:2)

使用GroupBy.filter + Series.any

new_df=df.groupby('a').filter(lambda x: x.b.eq(2).any() & x.b.eq(1).any())
print(new_df)

   a  b
2  B  1
3  B  2
4  B  3

我们还可以使用:

new_df=df[df.groupby('a').transform(lambda x: x.eq(1).any() & x.eq(2).any()).b]
print(new_df)

   a  b
2  B  1
3  B  2
4  B  3

答案 1 :(得分:1)

另一种方法:

s = (pd.DataFrame(df['b'].values == np.array([[1],[2]])).T
       .groupby(df['a'])
       .transform('any')
       .all(1)
    )

df[s]

输出:

    a   b
2   B   1
3   B   2
4   B   3