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

如何使用top100 DataFrame筛选百万行的pandas database DataFrame?

嘿,这个需求我经常碰到,用pandas有好几种靠谱的实现方式,我给你拆解一下最实用的几个:

方法1:用merge()做内连接(最直观简洁)

这是处理多列组合匹配的首选方案,直接通过内连接就能精准筛选出两个DataFrame中city+state完全匹配的行:

import pandas as pd

# 内连接,只保留两边都存在的城市-州组合,同时保留database的data列
filtered_database = pd.merge(database, top100, on=['city', 'state'], how='inner')

这里on=['city', 'state']指定用这两列作为匹配的键,how='inner'确保只有同时出现在top100和database里的组合才会被保留,结果会包含database的所有列(包括data),完全符合你的需求。

方法2:用MultiIndex配合isin()(大数据量更高效)

如果你的database有100万行,这种基于索引的操作会比循环/apply快很多:

# 把top100的城市-州组合转换成MultiIndex
top100_pairs = pd.MultiIndex.from_frame(top100)

# 给database设置临时的MultiIndex,然后筛选匹配的行,最后恢复原索引
filtered_database = database[database.set_index(['city', 'state']).index.isin(top100_pairs)]
filtered_database = filtered_database.reset_index(drop=True)

这种方法避免了逐行遍历,利用pandas的底层优化来提升效率,非常适合处理大规模数据。

方法3:用isin()配合元组集合(灵活但适合小数据)

如果想手动控制匹配逻辑,可以把top100的组合打包成元组集合,再逐行判断:

# 生成top100的城市-州元组集合
valid_pairs = set(zip(top100['city'], top100['state']))

# 筛选database中符合条件的行
filtered_database = database[database.apply(lambda row: (row['city'], row['state']) in valid_pairs, axis=1)]

不过要注意,apply是逐行操作,100万行的话速度会慢一些,所以更适合数据量不大的场景。

小提醒

别单独对city和state分别用isin()哦!比如可能存在“Richmond”同时在Virginia和其他州的情况,单独匹配会把不属于top100的组合也筛进来,一定要用组合匹配才行。

内容的提问来源于stack exchange,提问作者Thanh Nguyen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:25:50