【问题标题】:Python aggregate sum Quantity [duplicate]Python聚合总和数量[重复]
【发布时间】:2020-12-19 03:06:06
【问题描述】:

我有一个这样的 df

sale_id brand   Qty
1       Toyota  1
1       Toyota  2
2       Honda   1
2       Toyota  1
3       Lexus   3

有没有转换成的函数:

sale_id Toyota Honda Lexus
1       3      0     0
2       1      1     0
3       0      0     1

所以基本上我创建的列等于按 sale_id 购买的每种汽车类型的所有数量的总和。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    或者pd.crosstab聚合函数为sum

    pd.crosstab(df['sale_id'], df['brand'], df['Qty'], aggfunc='sum').fillna(0)
    

    输出:

    brand    Honda  Lexus  Toyota
    sale_id                      
    1          0.0    0.0     3.0
    2          1.0    0.0     1.0
    3          0.0    3.0     0.0
    

    【讨论】:

      【解决方案2】:

      试试

      s = df.groupby(['sale_id','brand']).Qty.sum().unstack(fill_value=0)
      Out[223]: 
      brand    Honda  Lexus  Toyota
      sale_id                      
      1            0      0       3
      2            1      0       1
      3            0      3       0
      

      【讨论】:

        【解决方案3】:

        我们可以使用DataFrame.pivot_table

        new_df = df.pivot_table(index='sale_id',
                                columns='brand',
                                values='Qty', 
                                fill_value=0,
                                aggfunc='sum')
        print(new_df)
        
        brand    Honda  Lexus  Toyota
        sale_id                      
        1            0      0       3
        2            1      0       1
        3            0      3       0
        

        【讨论】:

        • 另外,你忘记了 agg function = 'sum'
        猜你喜欢
        • 2017-01-21
        • 1970-01-01
        • 2021-02-11
        • 2016-08-12
        • 1970-01-01
        • 2019-06-18
        • 1970-01-01
        • 2014-07-27
        • 1970-01-01
        相关资源
        最近更新 更多