好的,我有一个数据框,其中包含每列有多行索引的时间序列数据。以下是数据外观的示例,它采用csv格式。加载数据不是问题。
我想要做的是能够根据multiinex特定行中的不同类别创建一个包含此数据的箱线图。例如,如果我按'SPECIES'进行分组,我会在时间序列的特定时间为每个组提供组,'aq','gr','mix','sed'和一个方框。
我试过这个:
grouped = data['2013-08-17'].groupby(axis=1, level='SPECIES')
grouped.boxplot()
但是它为组中的每个点而不是分组集提供了一个箱线图(扁平线)。是否有捷径可寻?我没有任何分组问题,因为我可以按照我想要的方式聚合组,但我不确定我在这个方框图上做错了什么。
任何帮助都将不胜感激。
答案 0 :(得分:33)
此代码:
int limit = ( 100 / 3 ) + 1;
IntStream.iterate(0, n -> n + 3).limit(limit).forEach(System.out::println);
无效,因为boxplot是DataFrame的函数而不是Series。
在Pandas中> 0.18.1 boxplot函数具有参数data['2013-08-17'].boxplot(by='SPECIES')
,该参数定义了从哪个列获取数据。
所以
columns
应该返回所需的结果。
Iris数据集的示例:
data.boxplot(column='2013-08-17',by='SPECIES')
创建:
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)
关闭恼人的自动字幕。而且当然 列参数接受列的列表......所以
plt.suptitle('')
也有效。
答案 1 :(得分:14)
我想我想通了,也许这会对某人有所帮助:
grouped = data['2013-08-17'].groupby(axis=1, level='SPECIES').T
grouped.boxplot()
基本上需要转换groupby输出,以便boxplot显示正确的分组:
答案 2 :(得分:0)
这应该适用于版本0.16:
data['2013-08-17'].boxplot(by='SPECIES')