如果组的数量大于阈值,则按groupby删除行

2024-09-28 21:16:32 发布

您现在位置:Python中文网/ 问答频道 /正文

Group Col2 Col3
Grp1 1
Grp1 1
Grp1 1
Grp1 2
Grp1 3
Grp1 3
Grp2 1
Grp2 1
Grp2 1
Grp3 1
Grp3 2
Grp3 3
Grp4 1

我希望按组分组,并从Col2中的数字超过2的数据帧中删除所有组 在这里我应该得到:

Group Col2
Grp2 1
Grp2 1
Grp2 1
Grp4 1

有人有主意吗


Tags: 数据group数字col2col3主意组分grp2
2条回答
not_list = df[df['Col2'] == 2]['Group']
result = df[~df['Group'].isin(not_list)]

使用函数来比较eq^{},并测试所有值是否与^{}匹配:

df1 = df[df['Col2'].eq(1).groupby(df['Group']).transform('all')]
print (df1)
   Group  Col2  Col3
6   Grp2     1   NaN
7   Grp2     1   NaN
8   Grp2     1   NaN
12  Grp4     1   NaN

或者获取所有组,其中至少有一个与ne不匹配的值,并通过^{}中的~反向掩码^{}进行过滤:

df = df[~df['Group'].isin(df.loc[df['Col2'].ne(1), 'Group'])]
print (df)
   Group  Col2  Col3
6   Grp2     1   NaN
7   Grp2     1   NaN
8   Grp2     1   NaN
12  Grp4     1   NaN

如果要比较不太相似的2个值:

#get groups less like 2
df1 = df[df['Col2'].lt(2).groupby(df['Group']).transform('all')]
#remove groups greater of equal like 2
df1 = df[~df['Group'].isin(df.loc[df['Col2'].ge(2), 'Group'])]

用于比较的所有函数的列表:

相关问题 更多 >