根据条件删除行组

Din*_*ius 5 python pandas

我有以下熊猫数据框:

df =

A          B       C
111-ABC    123    EEE
111-ABC    222    EEE
111-ABC    444    XXX
222-CCC    222    YYY
222-CCC    333    67T
333-DDD    123    TTT
333-DDD    123    BTB
333-DDD    444    XXX
333-DDD    555    AAA
Run Code Online (Sandbox Code Playgroud)

我想删除列中A不包含的所有行组(分组依据) 。123B

预期结果是这样的(行组222-CCC被删除):

result =

A          B       C
111-ABC    123    EEE
111-ABC    222    EEE
111-ABC    444    XXX
333-DDD    123    TTT
333-DDD    123    BTB
333-DDD    444    AAA
Run Code Online (Sandbox Code Playgroud)

怎么做?我认为首先我应该使用groupby,但是如何过滤掉行组,而不仅仅是特定的行?

result = df.groupby("A").... ??
Run Code Online (Sandbox Code Playgroud)

piR*_*red 3

使用query

a = df.query('B == 123').A.unique()
df.query('A in @a')

         A    B    C
0  111-ABC  123  EEE
1  111-ABC  222  EEE
2  111-ABC  444  XXX
5  333-DDD  123  TTT
6  333-DDD  123  BTB
7  333-DDD  444  XXX
8  333-DDD  555  AAA
Run Code Online (Sandbox Code Playgroud)

您可以在第一个条件中包含其他条件query

b = df.query('B == 123 & C == "EEE"').A.unique()
df.query('A in @b')

          A    B    C
0  111-ABC  123  EEE
1  111-ABC  222  EEE
2  111-ABC  444  XXX
Run Code Online (Sandbox Code Playgroud)

如果速度很重要的话。尝试这个。

cond1 = df.B.values == 123
a = np.unique(df.A.values[cond1])
df.loc[df.A.isin(a)]
Run Code Online (Sandbox Code Playgroud)