熊猫-在groupby中应用过滤器

时间:2020-03-20 06:59:56

标签: python pandas pandas-groupby

我正在尝试在数据框中按功能分组。我需要完成两次汇总,以找到总计数并基于对一列的过滤来找到计数

  <Switch>
    <Route path="/home" render={(props) => <Home {...props} />} />
    <Route path="/users" render={(props) => <Users {...props} />} />
    <Redirect to="/home" />
  </Switch>

我正在尝试创建一个列透视图,其中implementation 'com.onesignal:OneSignal:3.9.1' 具有已售出产品的数量,而product, count, type prod_a,100,1 prod_b,200,2 prod_c,23,3 prod_d,23,1 具有具有column 1的产品数量的

column 2

我能够获得已售产品的数量,但是我不确定如何应用过滤器并获得已售出type 1的数量

       sold, type_1
prod_a,1,1
prod_b,1,0
prod_c,1,0
prod_d,1,1

1 个答案:

答案 0 :(得分:3)

如果仅需按type==1之类的一种条件计数,则将GroupBy.aggnamed aggregations一起使用:

df2 = df.groupby("product").agg(sold = ('count','count'),
                                type_1= ('type', lambda x: (x == 1).sum()))
print (df2)

         sold  type_1
product              
prod_a      1       1
prod_b      1       0
prod_c      1       0
prod_d      1       1

要提高性能,请先创建一列,然后聚合sum

df2 = (df.assign(type_1 = df['type'].eq(1).astype(int))
         .groupby("product").agg(sold = ('count','count'),
                                 type_1 = ('type_1','sum')))

对于所有组合,请将crosstabDataFrame.join结合使用:

df1 = pd.crosstab(df['product'], df['type']).add_prefix('type_')
df2 = df.groupby("product").agg(sold = ('count','count')).join(df1)
print (df2)
         sold  type_1  type_2  type_3
product                              
prod_a      1       1       0       0
prod_b      1       0       1       0
prod_c      1       0       0       1
prod_d      1       1       0       0