假设我有这个pandas数据框架,
pC Truth
0 0.601972 0
1 0.583300 0
2 0.595181 1
3 0.418910 1
4 0.691974 1
'pC'是' true '为1的概率。"真理"是二进制值。我想创建一个概率的直方图,每个箱子里面是0和1的比例。
我试了以下命令,
df[['pC','Truth']].plot(kind='hist',stacked=True)
它只是把' 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)
我该怎么做?由于
根据我对你意思的理解:
- 创建传统的直方图计数与概率分类(水平,像往常一样),对于一些binsize。仅针对
Truth==0
的数据帧 - 现在用
(1-pC)
对Truth==1
的bin的互补概率值来增强该数据帧 - 现在将增强的df绘制为堆叠条形图(大概用白色填充互补的
Truth==1
条形段)
如果你发布可复制的代码(使用dput),并确认这是你想要的,我将发布代码。否则,发布一个链接到一些图片显示你想要的。
解决这个问题,
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');