【问题标题】:Boxplot with Pandas in PythonPython 中的 Pandas 箱线图
【发布时间】:2018-12-13 17:56:14
【问题描述】:

这就是我的数据框的样子:

      PART  METHOD  J    P         AVG         STD
0       1   meth1   3   50      0.914482    0.007398
1       1   meth2   3   50      0.925134    0.005738
...    ...  ...     ... ...        ...         ...
190     4   meth4   7   150     0.913014    0.006144
191     4   meth4   7   200     0.914199    0.002962

我想使用 AVG 和 STD 列(平均值和标准差)显示 Pandas 的箱线图,但我不知道如何开始。

例如,我想通过箱线图比较 PART = 1、J = 3 和 P = 50 的四种方法,看看这些值是否兼容(相似)。

我很迷茫,有什么指导吗?

编辑:下图显示了我想要的。其中 A、B、C 和 D 是方法,每个框由 AVG 的值结合 de STD 的值创建,PART = 1、J = 3 和 P = 50。

【问题讨论】:

  • 也许我不明白这个问题,但我认为您不能单独从均值和标准差创建箱形图。盒子和胡须基于四分位数,这取决于点的基本分布,而不仅仅是前两个矩。鉴于你的蓝框,我可以告诉你数据不是正态分布的,所以不确定你将如何得到你想要的。
  • 随着您的最新更新,您是否暗示对于 PART = 1、J = 3 和 P = 50,每种方法只有一行您希望仅使用单个 @ 值构建箱形图987654327@ 和 STD?

标签: python pandas data-visualization visualization


【解决方案1】:

您可以过滤数据框并使用参数创建箱线图。

filtered_df = df[(df['PART'] == 1) & (df['J'] == 3) & (df['P'] == 50)]
filtered_df.boxplot(column = 'AVG', by = 'METHOD', patch_artist = True)

对于以下示例 df

df = pd.DataFrame({'PART':np.random.randint(1,4,10000), 'METHOD':np.random.choice(list('ABCD'), 10000), 'J':np.random.randint(3,7, 10000), 'P':np.random.randint(50,100, 10000),'AVG':np.random.randn(10000),'STD':np.random.randn(10000)})

你得到

【讨论】:

  • 示例 df 是正确的,但我收到此错误:ValueError: not enough values to unpack (expected 2, got 0)。有什么线索吗?
  • 这意味着,在其中一个组中,您没有足够数量的行对应于每种方法。 filters_df 代码中缺少一个括号,我刚刚更正了它。无论如何,随着示例数据帧使用随机数生成器,结果会有所不同。
【解决方案2】:

你试过了吗

(df.groupby(['PART', 'J', 'P'])
 .get_group((1, 3, 50))
 .groupby('METHOD')
 .boxplot(column=['AVG', 'STD']));

以下样本数据中的哪一个

      PART  METHOD  J    P         AVG         STD
0       1   meth1   3   50      0.914482    0.6398
1       1   meth1   3   50      0.583014    0.5144
2       1   meth2   3   50      0.425134    0.5738
3       1   meth2   3   50      0.914199    0.2962
4       4   meth4   7   150     0.913014    0.6144
5       4   meth4   7   200     0.914199    0.2962

生产


更新

鉴于帖子的最新更新,请考虑这样做

(df.groupby(['PART', 'J', 'P'])
 .get_group((1, 3, 50))
 .boxplot(column=['AVG', 'STD'], by='METHOD'));

导致

【讨论】:

  • 是的,但是“我想通过箱线图比较 PART = 1, J = 3 和 P = 50 的四种方法”
  • 不起作用。我想要一个带有 4 个框的图,当 PART、J 和 P 分别为 1、3 和 50 时,每个框都显示每种方法的 AVG 和 STD
  • 不一样。我已经用图片更新了问题
猜你喜欢
  • 1970-01-01
  • 2014-06-07
  • 2018-08-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-03
  • 2017-12-12
  • 2013-10-27
相关资源
最近更新 更多