当前位置: 首页 > 知识库问答 >
问题:

基于groupby条件创建多个条形图

廉博赡
2023-03-14

我试图为数据集创建多水平条形图。这些数据涉及跑步比赛的比赛时间。

Dataframe有以下列:名称、年龄组、完成时间、完成地点、家乡。下面是示例数据。

我想创建一个类似下图的条形图。每个年龄组将有一个条形图,最快的跑步者在图表的底部,跑步者的名字与城市和次数跑了比赛低于他们的名字。

我需要一个for循环还是一个简单的groupby工作?每个年龄组的数量和大小可以根据种族动态变化,因此它不是一个常数,而是取决于每个种族使用的数据帧。

共有2个答案

翟宏放
2023-03-14

这是一个非常紧凑的解决方案。唯一棘手的部分是序数,如果你真的想得到它的话。我从序数替换中复制了lambda解

试试看,如果你喜欢的话,请用Up键标出答案。

import matplotlib.pyplot as plt

ordinal = lambda n: "{}{}".format(n,"tsnrhtdd"[(n/10%10!=1)*(n%10<4)*n%10::4])

for i, a in enumerate(df['Age Group'].unique()):

    plt.figure(i)
    dfa = df.loc[df['Age Group'] == a].copy()
    dfa['Info'] = dfa.Name + '\n' + dfa.Hometown + '\n' + \
              [ordinal(row) for row in dfa['Times Ran The Race']] + ' Time'
    plt.barh(dfa.Info, dfa['Finish Time'])
    plt.title(f'{a} Age Group')
    plt.xlabel("Time (Minutes)")
法镜
2023-03-14

我采用了一个循环过程。我使用按年龄组提取的数据作为临时数据帧,然后积累多个x轴的标签信息,为重用做准备。累积的标签信息被分解成字符串并存储在一个新的列表中。接下来,绘制水平条形图并更新x轴上的标签。

for ag in df['Age Group'].unique():
    label_all = []
    tmp = df[df['Age Group'] == ag]
    labels = [[x,y,z] for x,y,z in zip(tmp.Name.values, tmp.Hometown.values, tmp['Times Ran The Race'].values)]
    for k in range(len(labels)):
        label_all.append(labels[k])
    l_all = []
    for l in label_all:
        lbl = l[0] + '\n'+ l[1] + '\n' + str(l[2]) + ' Time'
        l_all.append(lbl)    

    ax = tmp[['Name', 'Finish Time']].plot(kind='barh', legend=False)
    ax.set_title(ag +' Age Group')
    ax.set_yticklabels([l_all[x] for x in range(len(l_all))])
    ax.grid(axis='x')
    for i in ['top','bottom','left','right']:
        ax.spines[i].set_visible(False)
 类似资料:
  • 我有一个这样的数据集 我想创建列(visit_no)。每当间隙大于1时,我们需要在接下来的行中将visit_no值增加1,直到我们找到另一个值,它将保持不变 这是数据框架

  • 虽然这段代码似乎可以按照td行的预期更改$TDStyle,但它没有根据esleif条件适当地更新$Font和$Text。它似乎总是保持这些字符串相同,仅基于else条件,即使它不是真的。也许只是语法问题?我确信有一个更好的方法来做到这一点,但我有限的知识使我走到了这一步。有什么建议吗?

  • 我试图通过选择符合以下条件的歌曲节点来转换上述XML: 状态='已发布' 如果匹配Data/Record/@Id的 /AUTH/AUTHOR_ID的AUTH/HIDE值为true,则不显示ART/TYPE(在这种情况下,Id=1826155) 所需的XML输出应包括Type、所有作者和标题。第二个歌曲类型在此示例中隐藏(因为HIDE=true对于主要作者): 我开始尝试每种方法,但发现我无法显示与

  • 问题内容: 我想所有和来自ID,是否有类似的东西而言,其与正则表达式的作品或有任何其他方式?否则,我将不得不针对每个项目(例如000ANT和0BBNTA)查询elasticsearch。请帮忙。 以下是我要尝试的一些东西,即1,但我也想有一个or条件,以便正则表达式也可以匹配。 问题答案: 使用而不是:

  • 基于“SC”代码,我需要将SRCTable与RefTable-1或RefTable-2连接起来 条件:如果SC为“D”,则SRCTable在KEY=KEY1上与RefTable-1连接以获得值。否则,如果SC为“U”,则SRCTable与键=键2上的RefTable-2连接 这是输入spark数据帧。 预期产出: 注意:输入表将有数百万条记录,因此需要一个优化的解决方案

  • 我正在使用如下所示的数据框(让我们调用MyData)。我想做的是按PatientKey分组并创建一个名为NewID的新ID。每次对于同一个PatientKey,时间之间的测试是 我尝试过使用dplyr来实现这一点,但问题是,当我尝试类似于以下代码时,后续值没有改变: 对象 任何人都有方便的dplyr或数据。表格解决方案,或者循环方法。