无组织数据帧创建的条形图?

2024-09-24 22:22:49 发布

您现在位置:Python中文网/ 问答频道 /正文

从下表中,我需要创建4个不同的条形图,对应于4个不同的位置TST1{}{}{}{}

如果可能的话,每个条形图应该有8个记号,用于NOT_DONE{}{}{}{}{}{}{}按该顺序排列。刻度将对应于给定位置的每个“值”出现的时间数。(位置是4个选项之一:L1{}{}{})

但是:

仅考虑最右边列中的值,这意味着如果在TST5中未找到值,则程序应检查TST4等,直到找到值为止。如果在这5列中未找到任何值,则不计算任何值。如果找到一个值,那么它与它左边的内容无关

我的思想过程是创建一个新的列数据框架,其中包含我需要的值(因此每行的值都是最正确的)及其对应的位置。我对这一切都是新手,不知道如何做到这一点,所以我非常感谢你对我的帮助

我需要使用Python2.7,我还使用seaborn进行绘图

+-------+----------+----------+----------+--------+----------+
| PLACE | TST1     | TST2     | TST3     | TST4   | TST5     |
+-------+----------+----------+----------+--------+----------+
| L1    |          | NOT_DONE |          |        | 50       |
+-------+----------+----------+----------+--------+----------+
| L1    |          |          | 35       |        |          |
+-------+----------+----------+----------+--------+----------+
| L4    |          |          |          |        |          |
+-------+----------+----------+----------+--------+----------+
| L3    |          |          | INCOMP   |        |          |
+-------+----------+----------+----------+--------+----------+
| L2    | UNTESTED |          |          | INCOMP |          |
+-------+----------+----------+----------+--------+----------+
| L3    |          |          |          |        |          |
+-------+----------+----------+----------+--------+----------+
| L4    |          | 30       |          |        |          |
+-------+----------+----------+----------+--------+----------+
| L3    |          | INCOMP   | 40       |        |          |
+-------+----------+----------+----------+--------+----------+
| L4    |          |          |          |        | UNTESTED |
+-------+----------+----------+----------+--------+----------+
| L1    |          |          |          |        |          |
+-------+----------+----------+----------+--------+----------+
| L3    |          | INCOMP   |          |        |          |
+-------+----------+----------+----------+--------+----------+
| L2    |          |          |          |        |          |
+-------+----------+----------+----------+--------+----------+
| L2    |          | 50       |          |        |          |
+-------+----------+----------+----------+--------+----------+
| L3    |          |          | UNTESTED | 35     | NOT_DONE |
+-------+----------+----------+----------+--------+----------+
| L1    |          |          |          |        |          |
+-------+----------+----------+----------+--------+----------+
| L2    |          | 40       |          | INCOMP |          |
+-------+----------+----------+----------+--------+----------+
| L3    |          |          |          |        |          |
+-------+----------+----------+----------+--------+----------+
| L1    |          |          |          |        |          |
+-------+----------+----------+----------+--------+----------+
| L4    |          | NOT_DONE |          | 30     | NOT_DONE |
+-------+----------+----------+----------+--------+----------+

enter image description here


Tags: l1时间not条形图l3done刻度l2
1条回答
网友
1楼 · 发布于 2024-09-24 22:22:49

I am required to use python 2.7, I am also using seaborn for the plotting.

在Python2.7.18和pandas 0.24.2上测试(尽管在Python3中工作良好):

  1. 使用^{}沿columns传播最右边的值(忽略PLACE):

    df['TST'] = df.drop(columns='PLACE').ffill(axis='columns').iloc[:, -1]
    
  2. PLACE分组并获取其^{}

    data = df.groupby('PLACE')['TST'].value_counts().reset_index(name='COUNT')
    
    #   PLACE       TST  COUNT
    # 0    L1        35      1
    # 1    L1        50      1
    # 2    L2    INCOMP      2
    # 3    L2        50      1
    # 4    L3    INCOMP      2
    # 5    L3        40      1
    # 6    L3  NOT_DONE      1
    # 7    L4        30      1
    # 8    L4  NOT_DONE      1
    # 9    L4  UNTESTED      1
    
  3. 然后将此data传递到^{}(使用order参数设置首选的勾号顺序):

    incompletes = ['NOT_DONE', 'INCOMP', 'UNTESTED']
    ticks = incompletes + sorted(data.TST.unique())[:len(incompletes)]
    
    g = sns.catplot(x='TST', y='COUNT', col='PLACE', col_wrap=2,
                    data=data, order=ticks, kind='bar')
    g.set_xticklabels(rotation=90)
    

    catplot output


版本:

>>> sys.version
2.7.18 (default, Mar 15 2021, 14:29:03) \n[GCC 10.2.0]
>>> pandas.__version__
0.24.2
>>> matplotlib.__version__
2.2.5
>>> seaborn.__version__
0.9.1

相关问题 更多 >