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