满足条件时删除所有组行?
Drop all group rows when met a condition?
我有 pandas 数据框有基于“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?
您可以按如下方式进行:
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
我有 pandas 数据框有基于“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?
您可以按如下方式进行:
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