我有一个具有以下结构的框架:
df = pd.DataFrame({'ID': np.random.randint(1, 13, size=1000),
'VALUE': np.random.randint(0, 300, size=1000)})
我该如何绘制图形,在X轴上会有百分位数(10%,20%,.. 90%) 并且在Y轴上应该有一定数量的值,该值介于百分位数刻度之间,例如20%-30% 而且每个ID都必须是一个单独的图(还应包含不同的百分位值)
我发现百分位卡住了
q = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8]
df.groupby('ID')['VALUE'].quantile(q)
我猜想该图应该看起来像VALUE参数的直方图,但是X轴上的百分比而不是数值
答案 0 :(得分:1)
q = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8]
for name, group in df.groupby('ID'): # Groupy by ID column
_, bins = pd.qcut(group.VALUE, q, retbins=True, grid=False) # Splits data in defined quantiles
plt.figure()
group.VALUE.hist(bins=bins) # Plots histogram of data with specified bins
ax.set_xticks(q, [f'{str(x) * 100}%' for x in q]) # format ticks (NOT TESTED)
plt.show()
此处未捕获输出图,因为它们很多。它会生成您想要的图,但是您还需要调整刻度线和格式。
要获得归一化的图,y轴的范围是0-100%,则需要在绘制之前对数据进行归一化(也许像group.VALUE.count() / df.VALUE.count()
答案 1 :(得分:0)