根据聚合计数删除行

有这样的数据框

car model
toyota corolla
toyota rav4
honda  civic
honda  civic
honda  accord

我如何编写一个删除次数少于 n 次的品牌,比如我想删除出现次数少于 3 次的品牌,结果数据帧将是

car model
honda  civic
honda  civic
honda  accord

所以我保留相同的数据框和所有变量,只删除行。

回答

In [22]: df.assign(cnt=df.groupby('car').transform(len)).query('cnt >= 3').drop('cnt', axis=1)
Out[22]:
     car   model
2  honda   civic
3  honda   civic
4  honda  accord
  1. 你得到每辆车使用的计数 df.groupby('car').transform(len)
  2. 使用 df.assign
  3. 过滤计数 >= 3
  4. 删除计数列

回答

您可以使用,groupbyfilter这样的:

 df.groupby('car').filter(lambda x: x['car'].count() >= 3)

输出:

     car   model
2  honda   civic
3  honda   civic
4  honda  accord

或者使用布尔索引,groupbytransform

df[df.groupby('car')['car'].transform('count') >= 3]


以上是根据聚合计数删除行的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>