You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何批量删除Pandas DataFrame中出现次数不足4次的城市行?

解决Pandas DataFrame按列值出现次数过滤的问题

嘿,这个需求太常见了,我来给你几个高效的实现方法,完全不用手动逐个删除目标城市的行:

方法一:用value_counts + isin组合

先筛选出出现次数≥4的城市列表,再保留这些城市的行:

# 获取出现次数≥4的城市名称
cities_to_keep = df['city'].value_counts()[df['city'].value_counts() >= 4].index
# 过滤DataFrame
filtered_df = df[df['city'].isin(cities_to_keep)]

原理很简单:value_counts()返回各城市的出现次数,我们筛选出计数≥4的条目,取它们的索引(也就是城市名),再用isin()保留这些城市对应的所有行。

方法二:用groupby + filter(最简洁)

这是我个人最常用的写法,一行就能搞定:

filtered_df = df.groupby('city').filter(lambda x: len(x) >= 4)

groupby('city')把数据按城市分组,filter()会对每个组执行lambda函数——检查组的长度(也就是该城市的出现次数)是否≥4,只有符合条件的组会被保留下来。

方法三:用transform计算每行的组计数

如果你需要先查看每个行对应的城市出现次数,或者想更直观地理解筛选逻辑,可以用transform:

# 给每行添加对应城市的出现次数列
df['city_count'] = df.groupby('city')['city'].transform('count')
# 筛选出次数≥4的行,再删掉临时列
filtered_df = df[df['city_count'] >= 4].drop('city_count', axis=1)

或者更紧凑的一行写法:

filtered_df = df[df.groupby('city')['city'].transform('count') >= 4]

transform('count')会把每个组的计数广播到组内的每一行,这样我们直接对这个广播后的计数列做筛选即可。

这三种方法都能自动识别所有出现次数≥4的城市,完全不用手动指定城市名,不管你的城市列表有多长都能适用~

内容的提问来源于stack exchange,提问作者Devin Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:17:35