【问题标题】:How can I add new columns to a dataframe with grouped amounts in percentage?如何将新列添加到按百分比分组的数据框中?
【发布时间】:2020-08-24 19:57:50
【问题描述】:

给出了这个数据框:

data = {'dates': ['01.05.2020', '01.05.2020', '01.05.2020', '02.05.2020', '02.05.2020', '03.05.2020', '03.05.2020'], 
        'amount' : [500,1000, 2000,3000,1000,4000, 2300], 'state' : ['ABC', 'ERT', 'ABC', 'XYZ', 'ERT' , 'ZEQ', 'ERT']}

在列状态中,我们有四个不同的值(ABC、ERT、XYZ 和 ZEQ)。现在我的目标是为每个州每天的百分比添加新列。因此,我们需要按日期分组,然后计算每个州的每日金额百分比。

例如新数据框的第一行应如下所示:

我怎样才能以最简单的方式做到这一点?

【问题讨论】:

    标签: python pandas dataframe pandas-groupby


    【解决方案1】:

    使用DataFrame.pivot_tablesum 进行旋转,然后除以每行的总和值:

    df = pd.DataFrame(data)
    
    df1 = df.pivot_table(index='dates', 
                        columns='state', 
                        values='amount', 
                        fill_value=0, 
                        aggfunc='sum')
    df1 = df1.div(df1.sum(axis=1), axis=0).round(2)
    print (df1)
    state        ABC   ERT   XYZ   ZEQ
    dates                             
    01.05.2020  0.71  0.29  0.00  0.00
    02.05.2020  0.00  0.25  0.75  0.00
    03.05.2020  0.00  0.37  0.00  0.63
    

    【讨论】:

    • 关于函数“div”的一个问题。我知道使用 sum(axis=1) 我们将每一列中的值相加(第一行 0.71 +0.29 +0+0)。但是,第二个属性(axis=0)是干什么用的?
    • @Minfetli 你可以查看this
    猜你喜欢
    • 2017-09-02
    • 2018-12-23
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 2021-12-26
    • 1970-01-01
    相关资源
    最近更新 更多