代码之家  ›  专栏  ›  技术社区  ›  Napitupulu Jon

Python堆积直方图

  •  0
  • Napitupulu Jon  · 技术社区  · 9 年前

    假设我有熊猫数据帧,

        pC  Truth
    0   0.601972    0
    1   0.583300    0
    2   0.595181    1
    3   0.418910    1
    4   0.691974    1
    

    “pC”是“真”为1的概率。“真”是二进制值。 我想创建概率的直方图,每个容器的内部将是比例0与比例1。

    我尝试了以下方法,

    df[['pC','Truth']].plot(kind='hist',stacked=True)

    它只是将“真相”值设置在0和1之间。

    可复制:

    shape = 1000
    df_t = pd.DataFrame({'pC': np.random.rand(shape),
                         'Truth':np.random.choice([0,1],size=shape)})
    df_t['factor'] = pd.cut(df_t.pC,5)
    

    我该怎么做?谢谢

    2 回复  |  直到 9 年前
        1
  •  0
  •   smci    9 年前

    根据我对你意思的理解:

    • 创建传统的直方图计数,并对某个二进制大小的概率进行二进制(通常是水平的)。仅适用于数据帧 Truth==0
    • 现在用互补的概率值来扩充数据帧 (1-pC) 对于那个箱子 Truth==1
    • 现在,将增强的df绘制为堆叠条形图(假设互补的填充颜色为白色 真相==1 杆段)

    如果你发布可复制的代码(使用dput)并确认这是你想要的,我会发布代码。否则,发布一个链接到一些显示您所需内容的图片。

        2
  •  0
  •   Napitupulu Jon    9 年前

    解决了这个问题,

    shape = 1000
    df_t = pd.DataFrame({'pC': np.random.rand(shape),
                         'Truth':np.random.choice([0,1],size=shape)})
    df_t['factor'] = pd.cut(df_t.pC,5)
    df_p = (df_t[['factor','Truth']]
            .pivot_table(columns='Truth',index='factor',aggfunc=len,fill_value=0)
            .reset_index())
    df_p[['factor',0,1]].plot(kind='bar',stacked=True,x='factor');