gpt4 book ai didi

python - Pandas 分组并删除行,如果组的数量大于阈值

转载 作者:行者123 更新时间:2023-12-04 10:46:11 26 4
gpt4 key购买 nike

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

有没有人有想法?

最佳答案

使用函数进行比较,如 eq GroupBy.transform 并通过 GroupBy.all 测试所有值是否匹配:

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 获取至少有一个不匹配值的所有组并按 Series.isin 过滤带倒置掩码 ~ boolean indexing :
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'])]

用于比较的所有函数的列表:
  • Series.lt - <
  • Series.gt - >
  • Series.le - <=
  • Series.ge - >=
  • Series.ne - !=
  • Series.eq - ==
  • 关于python - Pandas 分组并删除行,如果组的数量大于阈值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59694412/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com