【问题标题】:Boxplot with pandas groupby multiindex, for specified sublevels from multiindex带有 pandas groupby multiindex 的箱线图,用于来自 multiindex 的指定子级别
【发布时间】:2013-09-01 03:55:27
【问题描述】:

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

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

我试过了:

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

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

【问题讨论】:

    标签: python pandas dataframe pandas-groupby multi-index


    【解决方案1】:

    这段代码:

    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)
    

    创建:

    plt.suptitle('') 
    

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

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

    也可以。

    【讨论】:

    • 这真的很好,但是如何使每种类型的颜色不同?
    【解决方案2】:

    这应该适用于 0.16 版:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-10-18
        • 2020-12-15
        • 2017-04-06
        • 2018-10-28
        • 2015-05-22
        • 2020-02-14
        • 2021-04-04
        相关资源
        最近更新 更多