与熊猫groupby的Boxplot

pbr*_*ach 22 python multi-index dataframe pandas pandas-groupby

好吧,我有一个数据框,其中包含时间序列数据,每个列都有一个多行索引.以下是数据外观的示例,它采用csv格式.加载数据不是问题.

在此输入图像描述

我想要做的是能够根据multiinex特定行中的不同类别创建一个包含此数据的箱线图.例如,如果我按'SPECIES'进行分组,我会在时间序列的特定时间为每个组提供组,'aq','gr','mix','sed'和一个框.

我试过这个:

grouped = data['2013-08-17'].groupby(axis=1, level='SPECIES')
grouped.boxplot()
Run Code Online (Sandbox Code Playgroud)

但是它为组中的每个点而不是分组集提供了一个箱线图(扁平线).是否有捷径可寻?我没有任何问题分组,因为我可以按照我想要的方式聚合组,但我不确定我在这个盒子图中做错了什么.

任何帮助,将不胜感激.

sch*_*ump 43

这段代码:

data['2013-08-17'].boxplot(by='SPECIES')
Run Code Online (Sandbox Code Playgroud)

不起作用,因为boxplot是DataFrame而不是Series的函数.

在Pandas> 0.18.1中,boxplot函数具有参数columns,该参数定义从哪个列获取数据.

所以

data.boxplot(column='2013-08-17',by='SPECIES')
Run Code Online (Sandbox Code Playgroud)

应该返回所需的结果.

Iris数据集的示例:

import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv('https://raw.githubusercontent.com/pandas-dev/pandas/master/pandas/tests/data/iris.csv')
fig, ax = plt.subplots(figsize=(10,8))
plt.suptitle('')
data.boxplot(column=['SepalLength'], by='Name', ax=ax)
Run Code Online (Sandbox Code Playgroud)

创建:

Boxplot虹膜数据集与熊猫

plt.suptitle('') 
Run Code Online (Sandbox Code Playgroud)

关闭恼人的自动字幕.当然,列参数接受列列表......所以

data.boxplot(column=['SepalLength', 'SepalWidth'], by='Name', ax=ax)
Run Code Online (Sandbox Code Playgroud)

也有效.


pbr*_*ach 14

我想我想通了,也许这会对某人有所帮助:

grouped = data['2013-08-17'].groupby(axis=1, level='SPECIES').T
grouped.boxplot()
Run Code Online (Sandbox Code Playgroud)

基本上groupby输出需要转置,以便boxplot显示正确的分组:

在此输入图像描述