python - Pandas - 在 groupby 中应用过滤器
问题描述
我正在尝试在数据框中按功能执行分组。我需要完成两个聚合,以查找总计数并根据一列的过滤查找计数
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
我能够获得已售产品的数量,但我不确定如何应用过滤器并获得prod_a
已售产品的数量
df("product").agg({'count': [('sold', 'count')]})
解决方案
如果只需要一个条件计数,type==1
则使用GroupBy.agg
命名聚合:
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')))
对于所有组合使用crosstab
with 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
推荐阅读
- flutter - 将不同的类对象传递给函数
- javascript - TypeError: $(...).easyAutocomplete 不是一个函数
- ios - 如何创建一个快速拍摄多张照片的相机应用程序
- autosys - 如何为 Autosys 中的每个框设置延迟?
- spring - 各个级别的 Spring 事务是如何工作的?
- web-scraping - 如何使用漂亮的汤从保存的 html 页面中删除 td 行号和行内容类
- javascript - 如何获取动态创建的表的值?
- android - Observe Kotlin 中的返回值
- php - 在 WooCommerce 中禁用特定运输区域的“下订单”按钮
- javascript - 我怎样才能让我的提交按钮可点击一次并仍然执行我的 php?