如何基于一个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()方法,该方法底层基于哈希表实现,查询效率远高于循环遍历,尤其适合处理大规模数据集。
实现步骤:
- 从第一个DataFrame中提取所有存在的国家,生成唯一值集合(用
unique()去重,避免重复值影响匹配效率); - 调用第二个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
相关产品推荐
相关产品推荐

