Pandas - 绘制列的累积比例

时间:2018-04-23 15:18:15

标签: python python-3.x pandas plot

我有一个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比例全部堆叠在一个条形图中,显示相对比例如何随时间变化。

1 个答案:

答案 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() 

希望有所帮助