首页 > 解决方案 > 当熊猫的最大值达到阈值(或多或少)时保留组

问题描述

我有一个数据框,例如:

  Group  Col
    Grp1      5
    Grp1      1
    Grp1      1
    Grp1      2
    Grp1      3
    Grp1      3
    Grp1      4
    Grp2      1
    Grp2      1
    Grp2      1
    Grp3      1
    Grp3      2
    Grp3      3
    Grp4      1
    Grp4      3
    Grp4      1
    Grp4      2
    Grp5      3
    Grp6      3

这里的想法是只保留最高值在 3 到 4 之间的组,或多或少地得到:

Group  Col
Grp3      1
Grp3      2
Grp3      3
Grp4      1
Grp4      3
Grp4      1
Grp4      2
Grp5      3
Grp6      4

Grp1 被删除,因为它的5 最大值2 =3 or 4.

标签: pythonpandas

解决方案


与inGroupBy.transform过滤一起使用:Series.betweenboolean indexing

df1 = df[df.groupby('Group')['Col'].transform('max').between(3,4)]

或者Series.isin如果只想过滤最大值34组,请使用:

df1 = df[df.groupby('Group')['Col'].transform('max').isin(3,4)]

print (df1)
   Group  Col
10  Grp3    1
11  Grp3    2
12  Grp3    3
13  Grp4    1
14  Grp4    3
15  Grp4    1
16  Grp4    2
17  Grp5    3
18  Grp6    3

推荐阅读