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

用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 20:45:34