Pandas 是否在满足条件时删除所有组行?

Pandas 是否在满足条件时删除所有组行?,pandas,pandas-groupby,drop-duplicates,Pandas,Pandas Groupby,Drop Duplicates,我有一个基于“col10”和“col1”的两级组。我只想做的是,如果另一列中的指定值重复,或者该值在组中不存在(保留指定值只存在一次的组),则删除所有组行,例如: 原始数据帧: df=pd.DataFrame({'col0':['A','A','A','A','B','B','B','B','B','B','B','c','col1':[1,1,2,2,2,1,1,1,1,2,2,2,2,1],'col2':[1,2,1,2,2,2,2,1],'col2':[1,2,2,2,2,1]) 我

我有一个基于“
col10
”和“
col1
”的两级组。我只想做的是,如果另一列中的指定值重复,或者该值在组中不存在(保留指定值只存在一次的组),则删除所有组行,例如:

  • 原始数据帧:

    df=pd.DataFrame({'col0':['A','A','A','A','B','B','B','B','B','B','B','c','col1':[1,1,2,2,2,1,1,1,1,2,2,2,2,1],'col2':[1,2,1,2,2,2,2,1],'col2':[1,2,2,2,2,1])

我需要保留组的行,例如
(['A',1],'A',2],'B',2])

  • 所需的数据帧:

  • 我尝试了以下步骤:

    df.groupby(['col0','col1']).apply(lambda x:[x['col2']==1.sum()==1)

结果如何

col0  col1
A     1        True
      2        True
B     1       False
      2        True
c     1       False
dtype: bool

如何基于此bool创建所需的Df?

您可以按以下方式执行:

m=(df.groupby(['col0','col1'])['col2'].
     transform(lambda x: np.where((x.eq(1)).sum()==1,x,np.nan)).dropna().index)
df.loc[m]
或:



谢谢你的回答。我将此列表[('A',1),('A',2),('B',2)]作为说明,我不需要指定组。@Sidhom您要筛选的条件是什么?保留col2中的值(1)存在且未重复的组。@Sidhom添加了一个更好的解决方案。:)
df[df.groupby(['col0','col1'])['col2'].transform(lambda x: x.eq(1).sum()==1)]
   col0  col1  col2
0     A     1     1
1     A     1     2
2     A     2     1
3     A     2     2
4     A     2     3
12    c     1     1