Python 按删除发生特定值组合的行进行分组
如上所述,我想根据GROUPBY逻辑删除一个特定的行。在下面的数据框中,只要ID的F和G组合出现,我就要删除值为G的行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[
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。