我有一个0,1或2的数据帧列。我想在堆积条形图中绘制一段时间内的相对比例。例如。如果值是:
0 1 2 2 0 0 1
然后0 - %值将(舍入为1.d.p):
100 50 33 25 40 50 42
1%的值将(再次舍入为1.d.p):
0 50 33 25 20 33
我希望将0,1和2比例全部堆叠在一个条形图中,显示相对比例如何随时间变化。
答案 0 :(得分:0)
好的,首先我需要做出强制性的抱怨,即你没有提供你迄今为止的任何尝试,对你感到羞耻;)。
尽管如此,让我们来帮助你。首先应该将这项任务分解为小步骤。我们要: 1.为每个值创建指标列 我们需要每个这些的Cumsum 3.将其除以相应的行号(+1,因为索引从0开始) 4.绘制这个美丽的东西
我的尝试是 - 不是很漂亮,而是强力编码 - :
# Create Example Data
df = pd.DataFrame(np.random.randint(0,4, 10), columns=['A'] )
# The function to make it one go
def create_rolling_stack(df, column):
# Create the Indicators also called OneHotEncoding or DummyEncoding
dum = pd.get_dummies(df[column])
# build cumsum
cums = dum.cumsum()
# reset index
cums = cums.reset_index(drop=True)
# create the divisior
cums['div'] = cums.index.values +1
# ugly but divde each column by the respective row number
for col in cums.columns:
cums[col] = cums[col]/cums['div']
cums = cums.drop('div', axis = 1)
# Plot this awesome thing, note that stacked is set to True
cums.plot(kind= 'bar', stacked = True )
plt.show()
希望有所帮助