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 许可协议

阅读 365
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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题