Python 按删除发生特定值组合的行进行分组

Python 按删除发生特定值组合的行进行分组,python,pandas,dataframe,group-by,Python,Pandas,Dataframe,Group By,如上所述,我想根据GROUPBY逻辑删除一个特定的行。在下面的数据框中,只要ID的F和G组合出现,我就要删除值为G的行 import pandas as pd op_d = {'ID': [1,1,2,2,3,4],'Value':['F','G','K','G','H','G']} df = pd.DataFrame(data=op_d) df 在本例中,我想删除ID=1的第二行,其值为“G”。到目前为止 temp = df.groupby('ID').apply(lambda x: (x[

如上所述,我想根据GROUPBY逻辑删除一个特定的行。在下面的数据框中,只要ID的F和G组合出现,我就要删除值为G的行

import pandas as pd
op_d = {'ID': [1,1,2,2,3,4],'Value':['F','G','K','G','H','G']}
df = pd.DataFrame(data=op_d)
df
在本例中,我想删除ID=1的第二行,其值为“G”。到目前为止

temp = df.groupby('ID').apply(lambda x: (x['Value'].nunique()>1)).reset_index().rename(columns={0:'Expected_Output'})
temp = temp.loc[temp['Expected_Output']==True]
multiple_options = df.loc[df['ID'].isin(temp['ID'])]

到目前为止,我能够找出每个ID在何处具有多个值。您能告诉我如何删除此特定行吗?

使用
Series.eq
+
Series.groupby
使用
任意
转换:

m1, m2 = df['Value'].eq('F'), df['Value'].eq('G')
m = m2 & m1.groupby(df['ID']).transform('any') & m2.groupby(df['ID']).transform('any')
df1 = df[~m]
结果:

print(df1)
   ID Value
0   1     F
2   2     K
3   2     G
4   3     H
5   4     G

使用
Series.eq
+
Series.groupby
any
转换:

m1, m2 = df['Value'].eq('F'), df['Value'].eq('G')
m = m2 & m1.groupby(df['ID']).transform('any') & m2.groupby(df['ID']).transform('any')
df1 = df[~m]
结果:

print(df1)
   ID Value
0   1     F
2   2     K
3   2     G
4   3     H
5   4     G

使用
isin

c = (df['Value'].isin(['F','G']).groupby(df['ID']).transform('sum').eq(2) 
     & df['Value'].eq('G'))
out = df[~c].copy()


使用
isin

c = (df['Value'].isin(['F','G']).groupby(df['ID']).transform('sum').eq(2) 
     & df['Value'].eq('G'))
out = df[~c].copy()


一个群除了F和G还能有更多的元素吗?它可以有,但我主要关心的是它是否有F和G,然后去掉G。一个群除了F和G还能有更多的元素吗?它可以有,但我主要关心的是它是否有F和G,然后去掉G。