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

如何绘制Pandas DataFrame列中的NumPy数组并计算其平均值?

问题描述

给定如下DataFrame:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'sample_type': ['A', 'A', 'A'],
    'observed_data': [
        np.array([0.2, 0.5, 0.17, 0.1]),
        np.array([0.9, 0.3, 0.24, 0.5]),
        np.array([0.9, 0.5, 0.6, 0.39])
    ]
})

其中observed_data列的数据类型为np.array,需求如下:

  • 将每个独立的np.array绘制成单独曲线,比较类型为'A'的样本的观测数据轨迹;
  • 计算observed_data列所有行的平均值并绘制该平均曲线(例如期望得到平均数组avg = [0.666, 0.433, 0.336, 0.33])。

一、绘制单个样本曲线

使用matplotlib遍历样本数据逐个绘图,代码如下:

import matplotlib.pyplot as plt

# 筛选出样本类型为'A'的数据
df_a = df[df['sample_type'] == 'A']

plt.figure(figsize=(8, 5))
# 遍历每一行数据绘制曲线
for idx, row in df_a.iterrows():
    data = row['observed_data']
    plt.plot(data, label=f'Sample {idx+1}')

plt.xlabel('时间/步数')
plt.ylabel('观测值')
plt.title('类型A样本的观测数据轨迹')
plt.legend()
plt.grid(True)
plt.show()

这段代码会为每个样本生成一条独立曲线,通过图例区分不同样本,网格和坐标轴标签让图表更易读。


二、计算平均值并绘制平均曲线

通过np.stack将所有一维数组合并为二维矩阵,再按列求均值,代码如下:

# 将所有观测数组合并为二维数组
all_data = np.stack(df_a['observed_data'].values)
# 按列计算每个位置的平均值
avg_data = np.mean(all_data, axis=0)
# 保留三位小数匹配示例结果
avg_data = np.round(avg_data, 3)
print(f'平均数组: {avg_data}')  # 输出: 平均数组: [0.667 0.433 0.337 0.33 ]

# 叠加绘制单个样本曲线与平均曲线
plt.figure(figsize=(8, 5))
# 单个样本曲线设为半透明
for idx, row in df_a.iterrows():
    plt.plot(row['observed_data'], label=f'Sample {idx+1}', alpha=0.5)
# 平均曲线加粗突出
plt.plot(avg_data, label='平均轨迹', color='red', linewidth=2)

plt.xlabel('时间/步数')
plt.ylabel('观测值')
plt.title('类型A样本的观测数据轨迹与平均值')
plt.legend()
plt.grid(True)
plt.show()

np.stack能快速将分散的一维数组整合为可批量计算的二维矩阵,axis=0参数确保我们计算的是每个时间步的跨样本平均值。半透明的样本曲线搭配突出的平均曲线,能清晰对比整体趋势与个体差异。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:30:55