查找显示特定值的所有组

  • 本文关键字:显示 查找 python pandas
  • 更新时间 :
  • 英文 :


我是Python和Pandas的新手。我有以下数据帧:

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((方法似乎与此有关,但我自己无法理解。看起来应该直截了当。有什么帮助吗?

使用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

另一种方法:

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

最新更新