我是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()与此相关,但我自己无法弄清楚。看起来应该很简单。有帮助吗?
答案 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