许多Pandas数据框的箱线图

11

我有三个数据框,包含17组分别属于A、B、C组的数据。其中A组的数据如下所示:

import pandas as pd
import numpy as np
data1 = pd.DataFrame(np.random.rand(17,3), columns=['A','B','C'])
data2 = pd.DataFrame(np.random.rand(17,3)+0.2, columns=['A','B','C'])
data3 = pd.DataFrame(np.random.rand(17,3)+0.4, columns=['A','B','C'])

我想绘制一个箱线图,以比较下面图片中展示的三个组。 enter image description here 我试图使用Seaborn的箱线图来制作图表,代码如下:

import seaborn as sns
sns.boxplot(data1, groupby='A','B','C') 

但显然这不起作用。有人能帮忙吗?


数据为什么要分成三个数据框?这三个数据框之间有何不同的指标? - Parfait
@Parfait 没有必要将它们分成三个数据框。我可以将它们合并成一个数据框,但是这样会导致列名重复。除此之外,我知道它们不同,因为数据来自不同的位置,并且它们之间有指示器。 - Dillion Ecmark
位置是指标!在sns.boxplot中,你需要它来设置坐标轴。 - Parfait
1个回答

21

考虑为你的三组数据分配一个像 位置 这样的指标来区分它们。然后连接三个数据集并将其融合以检索一个 列,一个 字母 分类列和一个 位置 列,这些都是输入到 sns.boxplot 的:

import pandas as pd
import numpy as np
from matplotlib.pyplot as plt
import seaborn as sns

data1 = pd.DataFrame(np.random.rand(17,3), columns=['A','B','C']).assign(Location=1)
data2 = pd.DataFrame(np.random.rand(17,3)+0.2, columns=['A','B','C']).assign(Location=2)
data3 = pd.DataFrame(np.random.rand(17,3)+0.4, columns=['A','B','C']).assign(Location=3)

cdf = pd.concat([data1, data2, data3])    
mdf = pd.melt(cdf, id_vars=['Location'], var_name=['Letter'])
print(mdf.head())

#    Location Letter     value
# 0         1      A  0.223565
# 1         1      A  0.515797
# 2         1      A  0.377588
# 3         1      A  0.687614
# 4         1      A  0.094116

ax = sns.boxplot(x="Location", y="value", hue="Letter", data=mdf)    
plt.show()

直方图输出


2
非常感谢!这正是我正在寻找的! - Dillion Ecmark
谢谢@Ghanima!语法问题已经修复,缺少的句号已经添加。请删除您的评论,以便未来读者参考。 - Parfait

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接