分组并有条件删除熊猫

时间:2019-04-24 09:52:10

标签: python-3.x pandas

您好,我有一个数据框,例如:

Group_name  Event   colomn1 colomn2 colomn3 colomn4
Group1  1   1   1   1   0
Group1  2   2   2   4   2
Group1  3   2   2   4   2
Group2  1   8   8   8   0
Group3  1   2   2   2   0
Group3  2   2   2   2   0
Group4  1   2   2   5   3
Group4  2   2   2   2   0

我只想保留与下列过滤器相对应的GroupNumber

仅当colomn4 values is =0时才保留一个网上论坛,否则我将从标签中删除该网上论坛。

所以我应该得到:

Group_name  Event   colomn1 colomn2 colomn3 colomn4
Group2  1   8   8   8   0
Group3  1   2   2   2   0
Group3  2   2   2   2   0

您有想法在python中做吗?

1 个答案:

答案 0 :(得分:1)

如果所有值均符合GroupBy.transform==)的条件,则将GroupBy.allSeries.eq一起用于获取组:

df1 = df[df['colomn4'].eq(0).groupby(df['Group_name']).transform('all')]
print (df1)
  Group_name  Event  colomn1  colomn2  colomn3  colomn4
3     Group2      1        8        8        8        0
4     Group3      1        2        2        2        0
5     Group3      2        2        2        2        0

另一种方法是通过Series.ne获取所有没有0的组,并通过~反转掩码通过Series.isin进行过滤:

df = df[~df['Group_name'].isin(df.loc[df['colomn4'].ne(0), 'Group_name'])]
print (df)
  Group_name  Event  colomn1  colomn2  colomn3  colomn4
3     Group2      1        8        8        8        0
4     Group3      1        2        2        2        0
5     Group3      2        2        2        2        0