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

如何基于12个Pandas DataFrame生成94个新DataFrame并优化直方图

问题描述
  • 现有包含12个Pandas DataFrame的列表dfs,每个DataFrame包含94列
  • 需要生成94个新DataFrame:
    • 第1个新DataFrame(df1)的各列依次为dfs[0]['column 1']、dfs[1]['column 1']…dfs[11]['column 1']
    • 第2个新DataFrame(df2)的各列依次为dfs[0]['column 2']、dfs[1]['column 2']…dfs[11]['column 2']
    • 以此类推,直到第94个新DataFrame
  • 目标是基于每个新DataFrame,将其12列的数据分别绘制为同一张图中的直方图(共94张图),但现有代码仅将数据存入列表,导致同图中不同直方图无法通过颜色区分,且未生成所需的新DataFrame

现有代码

for i in range(94):
    data = [] # store all i'th column data across all dfs
    for df in dfs:
        data.extend(list(df.iloc[:,i])) # i'th column
    
    plt.hist(data, bins=50, histtype = 'step', label = dfs[0].iloc[:,i].name)
    plt.title(dfs[0].iloc[:,i].name) # get name of column from 1st df
    plt.xlabel(dfs[0].iloc[:,i].name) # get name of column from 1st df
    plt.ylabel('Frequency Density')
    plt.show()
解决方案

1. 生成94个新DataFrame

用字典存储新DataFrame,键为df1到df94,方便后续调用:

import pandas as pd

# 初始化存储新DataFrame的字典
new_dfs = {}

# 循环处理每一列(共94列)
for col_idx in range(94):
    columns = []
    for df_idx, df in enumerate(dfs):
        # 重命名列,便于区分来源
        col_data = df.iloc[:, col_idx].rename(f"df{df_idx+1}_{df.columns[col_idx]}")
        columns.append(col_data)
    
    # 合并列生成新DataFrame
    new_df = pd.concat(columns, axis=1)
    new_dfs[f"df{col_idx+1}"] = new_df

2. 绘制带颜色区分的直方图

基于新生成的DataFrame,为每个直方图分配不同颜色并添加图例:

import matplotlib.pyplot as plt

# 生成12种差异化颜色
colors = plt.cm.get_cmap('tab10', 12).colors

# 循环绘制每张图
for df_name, new_df in new_dfs.items():
    original_col_name = new_df.columns[0].split("_", 1)[1]
    plt.figure(figsize=(10, 6))
    
    # 逐个绘制新DataFrame的列
    for col_idx, col in enumerate(new_df.columns):
        plt.hist(new_df[col], bins=50, histtype='step', label=col, color=colors[col_idx])
    
    plt.title(f"Histogram of {original_col_name}")
    plt.xlabel(original_col_name)
    plt.ylabel('Frequency Density')
    plt.legend(title="Source DataFrame")
    plt.show()

说明

  • 列名重命名为dfX_原列名,可直接在图例中区分数据来源
  • 使用tab10色卡生成12种不同颜色,确保同图直方图颜色不重复
  • 图例标注清晰,解决了原代码无法区分不同来源数据的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 01:55:34