为了账号安全,请及时绑定邮箱和手机立即绑定

熊猫 - 按组应用过滤器

熊猫 - 按组应用过滤器

qq_遁去的一_1 2022-09-06 17:49:28
我正在尝试在数据帧中按函数执行组。我需要完成两个聚合,以查找总数并根据一列的筛选找到计数product, count, typeprod_a,100,1prod_b,200,2prod_c,23,3prod_d,23,1我正在尝试创建一个列透视表,其中包含已售出的产品计数,并且具有按以下方式计算的产品计数column 1column 2type 1       sold, type_1prod_a,1,1prod_b,1,0prod_c,1,0prod_d,1,1我能够获得已售产品的数量,但我不知道如何应用过滤器并获取已售产品的计数prod_adf("product").agg({'count': [('sold', 'count')]})
查看完整描述

1 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

如果只需要按一个条件计数,请使用 GroupBy.agg 和命名聚合:type==1


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')))

对于所有组合,将交叉表与 DataFrame.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


查看完整回答
反对 回复 2022-09-06
  • 1 回答
  • 0 关注
  • 74 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号