Python 从GroupBy中为箱线图选择列

Python 从GroupBy中为箱线图选择列,python,pandas,Python,Pandas,我有一个数据集,我想按某个字段分组,然后画一个或多个单列的箱线图。我试图进行一次分组,然后依次选择每一列,但不管怎样,boxplot似乎都会绘制所有列 下面是一个例子: import pandas as pd import matplotlib.pyplot as plt animals = pd.DataFrame({'kind': ['cat', 'dog', 'cat', 'dog', 'cat', 'dog'], 'height': [9

我有一个数据集,我想按某个字段分组,然后画一个或多个单列的箱线图。我试图进行一次分组,然后依次选择每一列,但不管怎样,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个专栏,我会做10次分组

澄清一下,我想要的是

grouped = mydata.groupby('something')
for col_name in [...column_names...]:
  grouped[[col_name]].boxplot(...)
  ...save plot to file
i、 e.一个分组操作和多个箱线图

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


使用pandas 0.25.1和Python 3.7.3,您可能需要这样的东西吗

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()

我不这么认为;不确定
apply
部分做什么,但这不是按种类分组两次吗?我澄清了这个问题,这将有助于hope@PeterHull第一个groupby获取任意多的列(如果在绘制boxplot时有许多列需要分隔),并在apply函数的帮助下使其成为dataframe。现在,您将只拥有箱线图所需的列,然后您可以简单地使用plotting功能。我以为这就是你想要的。