从GroupBy中选择列作为箱线图

时间:2019-08-23 16:10:06

标签: python pandas

我有一个数据集,我想按某个字段进行分组,然后绘制单个列的一个或多个箱形图。我试图进行一次分组,然后依次选择每列,但是boxplot似乎会绘制所有列。

这是一个例子:

import pandas as pd
import matplotlib.pyplot as plt

animals = pd.DataFrame({'kind': ['cat', 'dog', 'cat', 'dog', 'cat', 'dog'],
                        'height': [9.1, 6.0, 9.5, 34.0, 8.0, 30.0],
                        'weight': [7.9, 7.5, 9.9, 198.0, 8.0, 150.0]})

按“种类”分组,然后通过箱线图按预期给我四个盒子(猫,身高)(猫,体重)(狗,身高)(狗,体重)。

grouped = animals.groupby('kind')
grouped.boxplot(subplots=False)

现在,如果我只想要高度,我以为这会起作用:

grouped[["height"]].boxplot(subplots=False)

但是我只得到四个盒子。

我知道我能做到

animals.boxplot(column="height", by="kind")

这给了我我想要的,但这似乎效率很低;如果我有10列,我将进行十次分组。

为了澄清,我想要类似的东西

grouped = mydata.groupby('something')
for col_name in [...column_names...]:
  grouped[[col_name]].boxplot(...)
  ...save plot to file

即一次分组操作和许多箱线图。

DataFrameGroupBy中选择列的正确方法是什么?

使用熊猫0.25.1和Python 3.7.3

1 个答案:

答案 0 :(得分:0)

也许您需要这样的东西?

grouped_df = animals.groupby('kind')[['height']].apply(lambda x: x.reset_index(drop=True)).reset_index(level=0)

grouped_df.groupby('kind').boxplot(subplots=False)
plt.show()