如何基于现有DataFrame生成包含Top10高频城市的临时数据集
Pandas 筛选出现频次Top10城市对应全量数据方案
原代码错误原因
- 语法非法:
df_city[df_city['city_name']]属于错误索引写法,pandas行筛选不支持直接传入城市名Series作为参数 - 逻辑偏差:没有先统计城市出现次数,直接按城市名称排序取前10,不符合「出现次数最多」的筛选规则
- 结果不符合预期:即使代码能运行,最终输出也只有10条城市名字段值,无法保留原DataFrame的所有列数据
正确实现代码
常规写法(取频次前10,并列第10仅保留先出现的)
# 第一步:统计各城市出现次数,取出现次数最高的10个城市名称列表 top10_cities = df_city['city_name'].value_counts().head(10).index.tolist() # 第二步:筛选原数据集里属于这10个城市的所有行,保留全部字段 df_temp = df_city[df_city['city_name'].isin(top10_cities)]
兼容并列写法(频次并列第10的城市全部保留)
# 用nlargest的keep参数保留所有并列第10的城市 top10_cities = df_city['city_name'].value_counts().nlargest(10, keep='all').index.tolist() df_temp = df_city[df_city['city_name'].isin(top10_cities)]
内容的提问来源于stack exchange,提问作者Samuel Jackson
相关产品推荐
相关产品推荐

