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

如何移除gp_df中未在pp_df中出现的国家/地区行

问题

拥有两个DataFrame:gp_df和pp_df,数据示例如下:

gp_df = 
   CCA3            Country/Territory  year       GDP_USD
2662   AFG                  Afghanistan  1970  1.748887e+09
2661   AFE  Africa Eastern and Southern  1970  4.486261e+10
2663   AFW   Africa Western and Central  1970  2.350461e+10
2665   ALB                      Albania  1970           NaN
2720   DZA                      Algeria  1970  4.863487e+09
...    ...                          ...   ...           ...
16156  PSE           West Bank and Gaza  2020  1.553170e+10
16219  WLD                        World  2020  8.490680e+13
16222  YEM                  Yemen, Rep.  2020  1.884051e+10
16224  ZMB                       Zambia  2020  1.811063e+10
16225  ZWE                     Zimbabwe  2020  1.805117e+10


pp_df = 
   CCA3  Country/Territory Continent  2020 Population  1970 Population 
0    AFG        Afghanistan      Asia         38972230         10752971   
1    ALB            Albania    Europe          2866849          2324731   
2    DZA            Algeria    Africa         43451666         13795915   
3    ASM     American Samoa   Oceania            46189            27075   
4    AND            Andorra    Europe            77700            19860   
..   ...                ...       ...              ...              ...   
229  WLF  Wallis and Futuna   Oceania            11655             9377   
230  ESH     Western Sahara    Africa           556048            76371   
231  YEM              Yemen      Asia         32284046          6843607   
232  ZMB             Zambia    Africa         18927715          4281671   
233  ZWE           Zimbabwe    Africa         15669666          5202918   

需要移除gp_df中所有未在pp_df里出现的国家/地区行,尝试过drop()和np.where()但语法不对,求解决方法。


解决方案

方法1:isin()布尔索引(推荐)

以CCA3为匹配键(编码匹配比名称更准确,避免名称格式差异),筛选符合条件的行:

# 提取pp_df中所有有效的CCA3编码
valid_cca3 = pp_df['CCA3'].unique()
# 筛选gp_df,保留CCA3在有效列表中的行
filtered_gp_df = gp_df[gp_df['CCA3'].isin(valid_cca3)]

如果必须用国家名称匹配(需确保名称完全一致,比如示例中也门的名称不一致,这种情况不适用):

valid_countries = pp_df['Country/Territory'].unique()
filtered_gp_df = gp_df[gp_df['Country/Territory'].isin(valid_countries)]

方法2:merge()内连接

通过内连接自动保留两个DataFrame共有的行,仅保留gp_df原有列:

filtered_gp_df = gp_df.merge(pp_df[['CCA3']], on='CCA3', how='inner')

方法3:drop()删除不匹配行

先定位不匹配的行索引,再批量删除:

# 找出gp_df中CCA3不在pp_df里的行索引
invalid_indices = gp_df[~gp_df['CCA3'].isin(pp_df['CCA3'])].index
# 删除这些行
filtered_gp_df = gp_df.drop(invalid_indices)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:25:19