【问题标题】:Plotting bar charts for multi level groupby dataframe绘制多级分组数据框的条形图
【发布时间】:2020-01-07 09:53:52
【问题描述】:

使用 groupby 方法

    df = Al[['Connection Name','UAS-RS', 'SES-RS', 'OFS-RS', 'ES-RS', 'BBE-RS', 'Date', 'Alarm Type']]
    cols = ['Connection Name', 'Date', 'Alarm Type']

    df.mask(df == 0, np.nan).groupby(cols)[['UAS-RS', 'SES-RS', 'OFS-RS', 'ES-RS', 'BBE-RS']].count()

我得到了下表:

初始表有这个结构之王:

       | ConName |   Date   | Alarm | ETH1 | ETH2 | ETH 3|
       | AR21    | 25-01-19 |  AL1  |   1  |   0  |   3  |  
       | AR22    | 25-01-19 |  AL2  |   0  |   0  |   1  |
       | AR23    | 26-01-19 |  AL1  |   1  |   1  |   0  |  
       | AR21    | 26-01-19 |  AL2  |   0  |   1  |   0  |  

问题

我想为每个连接名称构建条形图,描述两种警报类型之间的特征分布。

我得到了什么:

想要的输出:

我最后一个只为一个连接名称构建绘图的代码:

for date in df[df['Connection Name']=='AR-CY18 A2.5G-RTA33']['Date']:
    df.mask(df == 0, np.nan).groupby('Alarm Type')[['UAS-RS', 'SES-RS', 'OFS-RS', 'ES-RS', 'BBE-RS']].count().plot(kind='bar',stacked=True,subplots=True)

另外,问题是,该脚本按日期构建了多个绘图(我在第 77 个绘图上中断了内核),并具有相同的输出。

我做错了什么? unstacking (unstack().plot.barh()) 也没有帮助。

欢迎提供任何线索。

【问题讨论】:

标签: python pandas matplotlib charts


【解决方案1】:

看起来您正试图为每个(date, conName) 生成一个图。这就是我要做的:

for (dt, con), d in df.groupby(['Date','ConName'], group_keys=False):
    fig,ax = plt.subplots()
    d.groupby('Alarm')[['ETH1','ETH2']].count().plot.bar(ax=ax)
    ax.set_title(con)

输出将是几个这样的图,其中2conName

【讨论】:

  • 这是有道理的。但出于某种原因,任何时候我试图在循环中按警报分组时都会收到错误“空'DataFrame':没有要绘制的数字数据”,我不完全了解其来源。
  • 可能是因为date, conName 的一个组合的值都是0,所以当你屏蔽/计数时,它会给你空帧。
  • 是的,找到原因了。某些功能具有值,但未提供警报。所以基本上它会按警报进行分组,但resulf是空的df。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-29
  • 2020-01-28
  • 1970-01-01
  • 2018-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多