我有一个数据集,我想按某个字段进行分组,然后绘制单个列的一个或多个箱形图。我试图进行一次分组,然后依次选择每列,但是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
答案 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()