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)
创建:
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显示正确的分组:

| 归档时间: |
|
| 查看次数: |
35136 次 |
| 最近记录: |