如何移除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
相关产品推荐
相关产品推荐

