【问题标题】:Plotting boxplot with pandas dataframe用熊猫数据框绘制箱线图
【发布时间】:2017-12-16 18:41:27
【问题描述】:

我创建了一个包含 PM2.5 数据的 pandas 数据框,并希望为每个站点创建单独的箱线图,其中包含每年的箱线图(顶部和底部的第 10 个百分位数)。我该怎么做?

日期阿伯丁奥肯科斯莫斯贝尔法斯特中心伯明翰泰本 2000-01-01 NaN NaN NaN NaN 2000-01-02 NaN NaN NaN NaN 2000-01-03 NaN NaN NaN NaN 2000-01-04 NaN NaN NaN NaN 2000-01-05 NaN NaN NaN NaN 2000-01-06 NaN NaN NaN NaN 2000-01-07 NaN NaN NaN NaN 2000-01-08 NaN NaN NaN NaN 2000-01-09 NaN NaN NaN NaN 2000-01-10 NaN NaN NaN NaN 2000-01-11 NaN NaN NaN NaN 2000-01-12 NaN NaN NaN NaN 2000-01-13 NaN NaN NaN NaN 2000-01-14 NaN NaN NaN NaN 2000-01-15 NaN NaN NaN NaN 2000-01-16 NaN NaN NaN NaN 2000-01-17 NaN NaN NaN NaN 2000-01-18 NaN NaN NaN NaN 2000-01-19 NaN NaN NaN NaN 2000-01-20 NaN NaN NaN NaN 2000-01-21 NaN NaN NaN NaN 2000-01-22 NaN NaN NaN NaN 2000-01-23 NaN NaN NaN NaN 2000-01-24 NaN NaN NaN NaN 2000-01-25 NaN NaN NaN NaN 2000-01-26 NaN NaN NaN NaN 2000-01-27 NaN NaN NaN NaN 2000-01-28 NaN NaN NaN NaN 2000-01-29 NaN NaN NaN NaN 2000-01-30 NaN NaN NaN NaN ……………… 2017-04-02 3.0 4.0 7.0 10.0 2017-04-03 5.0 4.0 9.0 14.0 2017-04-04 3.0 5.0 8.0 9.0 2017-04-05 7.0 5.0 7.0 7.0 2017-04-06 3.0 3.0 7.0 10.0 2017-04-07 3.0 3.0 11.0 14.0 2017-04-08 11.0 12.0 20.0 26.0 2017-04-09 11.0 15.0 17.0 25.0 2017-04-10 3.0 4.0 8.0 5.0 2017-04-11 1.0 6.0 9.0 7.0 2017-04-12 2.0 4.0 5.0 6.0 2017-04-13 2.0 3.0 6.0 6.0 2017-04-14 2.0 3.0 6.0 6.0 2017-04-15 3.0 3.0 6.0 6.0 2017-04-16 3.0 3.0 5.0 5.0 2017-04-17 4.0 3.0 7.0 11.0 2017-04-18 4.0 3.0 7.0 7.0 2017-04-19 6.0 4.0 11.0 13.0 2017-04-20 3.0 4.0 12.0 12.0 2017-04-21 3.0 4.0 11.0 11.0 2017-04-22 3.0 4.0 9.0 8.0 2017-04-23 3.0 4.0 6.0 9.0 2017-04-24 3.0 2.0 4.0 6.0 2017-04-25 3.0 3.0 6.0 5.0 2017-04-26 3.0 3.0 6.0 6.0 2017-04-27 3.0 2.0 6.0 8.0 2017-04-28 NaN 3.0 8.0 8.0 2017-04-29 NaN 6.0 7.0 9.0 2017-04-30 NaN 17.0 20.0 19.0 2017-05-01 19.0 18.0 20.0 8.0

【问题讨论】:

    标签: python pandas boxplot


    【解决方案1】:

    您可以尝试使用 matplotlib

    import matplotlib.pyplot as plt
    plt.boxplot(your_df['Aberdeen'].values)
    plt.show()
    

    如果您使用的是 jupyter,请使用 %matplotlib inline

    【讨论】:

      【解决方案2】:
      import pandas as pd
      df = pd.DataFrame({'Date': ['2000-10-10', '2000-09-20', '2001-09-23', '2001-09-10', '2001-09-02', '2002-04-29',],
                'Aberdeen': [9,5,1, 2, 6, 1]})
      
      df['Year'] = df['Date'].str.split('-')
      df['Year'] = df['Year'].apply(lambda x : x[0])
      sns.boxplot(df['Year'], df['Aberdeen'])
      

      【讨论】:

        【解决方案3】:

        来吧。

        import matplotlib.pyplot as plt
        import pandas as pd
        
        # copy your sample
        df = pd.read_clipboard(header=0, index_col='Date').fillna(0)
        
        # remove row with '...'
        df = df[df.Moss != '...'].astype(float)
        
        # set index to datetime index
        df.index = pd.DatetimeIndex(df.index)
        
        # groupby year
        grouped = dict(list(df.groupby(date_index.year)))
        
        # set up a figure with 1 row, 2 colums
        fig, ax = plt.subplots(1, 2,
                               sharey=True, 
                               figsize=(8, 6), 
                               tight_layout=True)
        
        # iterate through our grouped and plot 
        for i, (k, v) in enumerate(grouped.items()):
            v.boxplot(ax=ax[i],
                      rot=90, 
                      figsize=(3, 3)).set(title=f'{k}')
        
        plt.show()
        

        Year 2000 没有数据点,但你可以看到它的要点。

        【讨论】:

          猜你喜欢
          • 2018-03-19
          • 2023-03-28
          • 2017-03-20
          • 2018-10-15
          • 1970-01-01
          • 2020-11-29
          • 1970-01-01
          • 2018-10-20
          • 1970-01-01
          相关资源
          最近更新 更多