python - 带有 pandas groupby multiindex 的箱线图,用于来自 multiindex 的指定子级别

标签 python pandas dataframe pandas-groupby multi-index

好的,所以我有一个数据框,其中包含时间序列数据,每列都有一个多行索引。这是数据的样例,它是 csv 格式的。加载数据在这里不是问题。

enter image description here

我想要做的是能够创建一个箱线图,其中包含根据多索引特定行中的不同类别分组的数据。例如,如果我要按“SPECIES”分组,我将在时间序列中的特定时间为每个组提供“aq”、“gr”、“mix”、“sed”和一个框

我试过了:

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

但它给了我组中每个点的箱线图(平线),而不是分组集。是否有捷径可寻?我没有任何分组问题,因为我可以按照我想要的任何方式聚合组,但我无法让它们进入箱线图。

最佳答案

这段代码:

data['2013-08-17'].boxplot(by='SPECIES')

不会起作用,因为 boxplot 是 DataFrame 而非 Series 的函数。

虽然在 Pandas > 0.18.1 中,boxplot 函数具有参数 columns,它定义了数据来自哪一列。

所以

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/io/data/csv/iris.csv')
fig, ax = plt.subplots(figsize=(10,8))
plt.suptitle('')
data.boxplot(column=['SepalLength'], by='Name', ax=ax)

创建:

Boxplot iris dataset with pandas

plt.suptitle('') 

关闭烦人的自动字幕。而且当然 列参数接受列列表...所以

data.boxplot(column=['SepalLength', 'SepalWidth'], by='Name', ax=ax)

也可以。

关于python - 带有 pandas groupby multiindex 的箱线图,用于来自 multiindex 的指定子级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18498690/

相关文章:

python - 制作 pycaffe -> "fatal error: cublas_v2.h: No such file or directory"

python - Pandas 从具有不同列名的 2 个数据帧映射数据

python - 从字典创建 pandas 数据框

python - pytest-hypothesis 运行之间的测试隔离

python - 列表的产品

Python 列合并

python - 转换多索引数据帧以保留 groupby() 聚合

Python3.4 : DataFrame from Dictionary

python - 将 dask 列转换为日期并应用 lambda 函数

r - 在数据框中选择观察值并反转它们的顺序