pandas/matplotlib 中一列按另一列分组的箱形图

Posted

技术标签:

【中文标题】pandas/matplotlib 中一列按另一列分组的箱形图【英文标题】:Box plot of one column grouped by another in pandas/matplotlib 【发布时间】:2017-08-09 07:09:57 【问题描述】:

假设我有一个这样的数据框:

species,weight
lion,130
lion,190
giraffe,803
lion,150
giraffe,1200
hippo,1300
giraffe,1000
hippo,1800
giraffe,1100
lion,160

每个物种有不同数量的动物(例如,更少,抱歉 - 更少 - 河马)。我想制作一个箱线图,显示每个物种的重量分布。怎么做?

【问题讨论】:

【参考方案1】:
import matplotlib.pyplot as plt
import numpy as np

# fake up some data
spread = np.random.rand(50) * 100
center = np.ones(25) * 50
flier_high = np.random.rand(10) * 100 + 100
flier_low = np.random.rand(10) * -100
data = np.concatenate((spread, center, flier_high, flier_low), 0)

# basic plot
plt.boxplot(data)

# notched plot
plt.figure()
plt.boxplot(data, 1)


# horizontal boxes
plt.figure()
plt.boxplot(data, 0, 'rs', 0)

# change whisker length
plt.figure()
plt.boxplot(data, 0, 'rs', 0, 0.75)

# fake up some more data
spread = np.random.rand(50) * 100
center = np.ones(25) * 40
flier_high = np.random.rand(10) * 100 + 100
flier_low = np.random.rand(10) * -100
d2 = np.concatenate((spread, center, flier_high, flier_low), 0)
data.shape = (-1, 1)
d2.shape = (-1, 1)

plt.show()

不是 Matplotlib 专家,但我在网上找到了这段代码,我觉得它看起来不错。我只想在数据部分中输入您的值。

【讨论】:

如果您在网上找到可用的代码,请在 cmets 中链接到它。这不是问题的答案。【参考方案2】:
df.boxplot(by = 'species', vert = False)

【讨论】:

虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。 它提供了答案。我知道,我是这个问题的作者。

以上是关于pandas/matplotlib 中一列按另一列分组的箱形图的主要内容,如果未能解决你的问题,请参考以下文章

按另一列值分组和计数

将一列的多个结果行连接成一个,按另一列分组[重复]

Python:如何按一列分组行并按另一列选择一行?

pandas 按另一列的平均值对一列的值进行排序

如何按一列的最大值获取SQL行,按另一列分组

熊猫数据框:按列子集+按另一列分组