如何用Pandas对比两个DataFrame列并筛选共有国家数据
解决两个DataFrame保留共有国家数据的问题
现有两个均包含
Country列的DataFrame,其中存在彼此独有的国家数据。需过滤掉这些独有国家,使两个DataFrame仅保留双方共有的国家数据。例如,若阿尔及利亚仅在DataFrame A中存在,则删除A中的阿尔及利亚行(B中独有国家同理)。我尝试使用isin方法,得到如下布尔序列,是否正确?后续需移除标记为False的行:x.Country.isin(y.Country) 83 True 111 True 0 True 4 True 67 True ... 175 False 174 False 130 False 49 True 50 True Name: Country, Length: 176, dtype: bool
你的思路完全正确!x.Country.isin(y.Country)生成的布尔序列就是用来标记x中哪些国家在y里存在的——True表示该国家是双方共有的,False则是x独有的、需要剔除的条目。
接下来直接用这个布尔序列过滤DataFrame即可:
# 过滤x,只保留双方共有的国家 x_filtered = x[x.Country.isin(y.Country)] # 同理处理y,保留和x共有的国家 y_filtered = y[y.Country.isin(x.Country)]
这样处理后,两个DataFrame就只会包含彼此都有的国家数据了。如果担心大小写、空格这类细节导致匹配出错,可以先统一处理Country列的格式:
x['Country'] = x['Country'].str.strip().str.lower() y['Country'] = y['Country'].str.strip().str.lower()
再执行上面的过滤操作,能避免很多不必要的匹配失误。
内容的提问来源于stack exchange,提问作者Yusuf Oddy
相关产品推荐
相关产品推荐

