Python:根据计数条件删除行

新手上路,请多包涵

我在过滤 pandas 数据帧时遇到问题。

 city
NYC
NYC
NYC
NYC
SYD
SYD
SEL
SEL
...

df.city.value_counts()

我想 删除计数频率少于 4 的城市行, 例如 SYD 和 SEL。

如果不手动逐个城市删除它们,这样做的方法是什么?

原文由 Devin Lee 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 368
2 个回答

给你过滤器

df.groupby('city').filter(lambda x : len(x)>3)
Out[1743]:
  city
0  NYC
1  NYC
2  NYC
3  NYC

方案二 transform

 sub_df = df[df.groupby('city').city.transform('count')>3].copy()
# add copy for future warning when you need to modify the sub df

原文由 BENY 发布,翻译遵循 CC BY-SA 4.0 许可协议

这是使用 pd.Series.value_counts 的一种方式。

 counts = df['city'].value_counts()

res = df[~df['city'].isin(counts[counts < 5].index)]

counts 是一个 pd.Series 对象。 counts < 5 返回布尔系列。我们通过布尔值 counts < 5 系列过滤计数系列(这就是方括号实现的目的)。然后,我们使用结果系列的索引来查找计数 < 5 的城市。 ~ 是否定运算符。

请记住,系列是索引和值之间的映射。系列的索引不一定包含唯一值,但这可以通过 value_counts 的输出来保证。

原文由 jpp 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题