用Pandas优雅合并DataFrame并填充空值,基于分数绘制带颜色散点图
Pandas 合并与Matplotlib条件上色解决方案
一、DataFrame 合并(保留所有name,缺失score填0)
直接左连接无法覆盖两个DataFrame的全部name,需用外连接后填充缺失值:
import pandas as pd # 示例数据 data1 = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'], 'score': [90, 160, 210]}) data2 = pd.DataFrame({'name': ['Bob', 'Charlie', 'Dave'], 'score': [120, 180, 80]}) # 外连接合并,自动生成score_x、score_y,缺失值填充为0 merged_df = pd.merge(data1, data2, on='name', how='outer', suffixes=('_x', '_y')).fillna(0)
最终得到的merged_df会包含两个数据集的所有name,缺失的score字段统一填充为0。
二、Matplotlib 按最大值条件上色散点图
先计算每行score_x和score_y的最大值,再按区间分配颜色,代码如下:
import matplotlib.pyplot as plt import numpy as np # 计算每行的最大分数 merged_df['max_score'] = merged_df[['score_x', 'score_y']].max(axis=1) # 定义条件与对应颜色(优先级从高到低) conditions = [ merged_df['max_score'] > 200, merged_df['max_score'] > 150, merged_df['max_score'] > 100 ] color_list = ['red', 'green', 'red'] # 为每个点分配颜色 merged_df['point_color'] = np.select(conditions, color_list, default='blue') # 绘制散点图 plt.figure(figsize=(8, 6)) plt.scatter(merged_df['score_x'], merged_df['score_y'], color=merged_df['point_color'], s=100) # 图表基础设置 plt.xlabel('score_x') plt.ylabel('score_y') plt.title('Scatter Plot Colored by Max Score') plt.grid(True) plt.show()
三、其他推荐绘图库
- Seaborn:基于Matplotlib的统计可视化库,语法更简洁,分类上色、统计类图表只需几行代码就能实现。
- Plotly:交互式可视化库,生成的图表支持缩放、hover查看数据,适合做需要交互的展示。
- Altair:声明式绘图库,用简洁的语法定义图表结构,快速生成复杂可视化。
内容的提问来源于stack exchange,提问作者newstudenttoprogramming
相关产品推荐
相关产品推荐

