我的熊猫数据框具有基于'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]})
我需要在原始DF中保留该组的行,例如(['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
如何基于该布尔值创建所需的Df?
答案 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