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
添加回答
举报