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

如何用Python迭代实现多DataFrame与基线DataFrame的分组子图绘制?

用迭代方式简化多DataFrame多ID多特征的绘图逻辑

核心思路

把重复的绘图逻辑拆解成三层迭代,彻底替代重复代码:

  • 迭代所有需要对比的DataFrame(含基线)
  • 迭代每个唯一ID
  • 迭代三类特征(Salary/Children/Expenditure)

代码实现

import matplotlib.pyplot as plt

# 1. 把所有DataFrame打包成字典,统一管理方便迭代
df_collection = {
    '基线': df_base,
    '对比组1': df_1,
    '对比组2': df_2,
    '对比组3': df_3
}

# 2. 获取所有唯一ID(假设各DataFrame的ID集合一致)
all_ids = df_base['id'].unique()

# 3. 定义要绘制的三类特征
target_features = ['Salary', 'Children', 'Expenditure']

# 4. 迭代每个ID生成对比图
for current_id in all_ids:
    # 创建3个子图,横向排列
    fig, axes = plt.subplots(1, 3, figsize=(18, 5))
    fig.suptitle(f'ID: {current_id} 特征随Cycle变化对比', fontsize=14)
    
    # 迭代每个特征,对应子图绘制曲线
    for idx, feature in enumerate(target_features):
        ax = axes[idx]
        # 迭代每个DataFrame,绘制当前特征的曲线
        for df_name, df in df_collection.items():
            # 筛选当前ID的数据并按cycle排序
            filtered_data = df[df['id'] == current_id].sort_values('cycle')
            # 绘制cycle vs 特征的曲线
            ax.plot(filtered_data['cycle'], filtered_data[feature], label=df_name, marker='o')
        
        # 设置子图基础样式
        ax.set_title(f'{feature} 变化趋势')
        ax.set_xlabel('Cycle')
        ax.set_ylabel(feature)
        ax.legend()
        ax.grid(True)
    
    plt.tight_layout()
    plt.show()

关键优化点

  • 字典管理DataFrame:后续新增对比组只需在字典中添加条目,无需修改绘图逻辑
  • 三层迭代压缩代码:把ID、特征、DataFrame三个维度的重复工作用循环处理,彻底告别27次重复编码
  • 统一数据预处理:自动筛选当前ID并按cycle排序,保证曲线时序正确
  • 高可扩展性:新增特征只需修改target_features列表,无需调整核心绘图代码

内容的提问来源于stack exchange,提问作者NN_Developer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 06:13:21