如何正确合并两个Pandas DataFrame并绘制腐败与不平等关系散点图
解决思路
你现在用的纵向拼接方式不符合散点图的需求:散点图需要每一行对应一组「国家+年份」的x/y值,也就是腐败指数和不平等指数要作为两个独立列存在,正确处理步骤如下:
步骤1:将宽格式原始表转为长格式
两个原始DataFrame都采用年份作为列名的宽结构,先统一转换为国家-年份-指标值的长结构:
# 不平等指数表转长表 inq_long = inq.melt(id_vars="country", var_name="year", value_name="gini_index") # 腐败指数表转长表 corr_long = corr.melt(id_vars="country", var_name="year", value_name="corruption_index")
步骤2:按国家+年份合并两个长表
用内连接合并,仅保留两个表同时存在数据的(国家,年份)组合,避免空值影响绘图:
merged = pd.merge( inq_long, corr_long, on=["country", "year"], how="inner" ) # 过滤掉两个指标存在空值的无效行 merged = merged.dropna(subset=["gini_index", "corruption_index"])
步骤3:直接绘制散点图
合并后的表每行对应一组x/y值,直接调用绘图接口即可:
import matplotlib.pyplot as plt plt.scatter(merged["corruption_index"], merged["gini_index"]) plt.xlabel("腐败指数") plt.ylabel("不平等指数(GINI)") plt.show()
样例效果
用你给出的样例数据执行以上操作后,最终会得到1条有效数据:
- 安哥拉2018年:GINI=51.3,腐败指数=40.4
其他(国家,年份)组合因至少一个指标为空,会被过滤不参与绘图。
内容的提问来源于stack exchange,提问作者data_runner
相关产品推荐
相关产品推荐

