满足条件时删除所有组行?

时间:2019-03-31 15:00:37

标签: pandas pandas-groupby drop-duplicates

我的熊猫数据框具有基于'col10'和'col1'的两级组。我要做的就是,如果重复另一列中的指定值,则删除所有组行或该值在组中不存在(仅使指定值存在的组保留一次),例如:

  • 原始数据帧:

    df = pd.DataFrame( {'col0':['A','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,1], 'col2':[1,2,1,2,3,1,2,1,2,2,2,2,1]})

demo

我需要在原始DF中保留该组的行,例如(['A',1],['A',2],['B',2])

  • 所需的数据框:

enter image description here

  • 我尝试了此步骤:

    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

如何基于该布尔值创建所需的Df?

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

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

或者:

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