【问题标题】:Calculate percentage Pandas groupby计算百分比 Pandas groupby
【发布时间】:2022-06-13 23:57:49
【问题描述】:

我有一个包含 4 列的数据框:“ID”(客户)、“项目”、“层”(高/低)、“单位”(数字)。现在对于每个项目和每一层,我想找到总单位以及有多少客户为每一层购买至少一个项目。我这样做

df.groupby(['item','tier']).agg(
    ID_amount=('ID', 'size'),
    total_units=('units', 'sum'))


item        tier    ID_amount      total_units
100010001   high    83             178,871.00
            low     153            1,450,986.00
100010002   high    722            10,452,778.00
            low     911            5,505,136.00
100020001   high    400              876,490.00
            low     402              962,983.00
100020002   high    4933          61,300,403.00
            low     13759        1,330,932,723.00
100020003   high    15063          176,846,161.00
            low     24905          288,232,057.00

我想要另一列表示“total_units”列的百分比。当我尝试时

df.groupby(['item','tier']).agg(
        ID_amount=('ID', 'size'),
        total_units=('units', 'sum'),
        percen_units=('units', lambda x: 100*x/x.sum())

它给出了错误必须产生聚合值。如何修改我的代码以提供这些百分比?

【问题讨论】:

    标签: pandas pandas-groupby aggregate percentage


    【解决方案1】:

    我想你想要这个:

    dfs = df.groupby(['item','tier']).agg(
            ID_amount=('ID', 'size'),
            total_units=('units', 'sum'))
    
    dfs['percent_units'] = dfs.groupby('item')['total_units']\
                              .transform(lambda x: x/x.sum()*100)
    
    dfs
    

    【讨论】:

    • 非常感谢!为什么不能只用一个命令创建那个df?我的意思是单个 groupby
    • @jero 好吧,您的组很好,您正在对 item 和 teir 进行分组,但您需要一个仅包含 item 的组才能获得单位总数。
    猜你喜欢
    • 1970-01-01
    • 2022-11-21
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多