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

如何基于一个DataFrame的国家列表高效过滤另一个DataFrame?

问题

现有两个DataFrame,需要对第二个DataFrame进行筛选,仅保留第一个DataFrame中存在的国家的数据。

第一个DataFrame(筛选后结果):

country         pop continent  lifeExp    gdpPercap
0  Afghanistan  31889923.0      Asia   43.828   974.580338
1      Albania   3600523.0    Europe   76.423  5937.029526
2      Algeria  33333216.0    Africa   72.301  6223.367465

第二个DataFrame:

country         year         Production
Afghanistan    1980          20
Afghanistan    1981          10
Afghanistan    1983          5
Albania        1970         30
Albania        1980         40
Abisinia       1990          3
Algeria        1990         30
Angola          1980         2
Angola         1982         30

需求:筛选出第二个DataFrame中仅包含第一个DataFrame里存在的国家(即Afghanistan、Albania、Algeria)的数据,求最符合Python风格且高效的实现方式。

解决方案

最符合Python风格且高效的实现方式是使用pandas的isin()方法,该方法底层基于哈希表实现,查询效率远高于循环遍历,尤其适合处理大规模数据集。

实现步骤:

  1. 从第一个DataFrame中提取所有存在的国家,生成唯一值集合(用unique()去重,避免重复值影响匹配效率);
  2. 调用第二个DataFrame的country列的isin()方法,筛选出符合条件的行。

代码示例:

import pandas as pd

# 假设第一个DataFrame名为df1,第二个为df2
valid_countries = df1['country'].unique()
filtered_df2 = df2[df2['country'].isin(valid_countries)]

筛选后的结果:

country         year         Production
Afghanistan    1980          20
Afghanistan    1981          10
Afghanistan    1983          5
Albania        1970         30
Albania        1980         40
Algeria        1990         30

补充说明:

  • 如果df1的country列本身无重复值,也可以直接用df1['country']代替df1['country'].unique(),但后者能减少isin()的匹配次数,效率略高;
  • 该方法时间复杂度为O(n),是pandas处理这类筛选场景的最优方案之一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 23:00:55