如何在Python中高效统计满足Sales与P类列均>0的月度ID数量?
高效实现按月份统计符合条件的ID数量
核心思路
先通过Sales>0过滤数据,再对所有P列生成同时满足P列>0的布尔掩码,最后按Month分组求和(布尔值求和等价于统计True的数量),全程用pandas向量化操作替代循环,大幅提升效率。
代码示例
import pandas as pd # 假设原始数据框为 df # 1. 先筛选出Sales大于0的行,缩小计算范围 sales_filtered = df[df['Sales'] > 0] # 2. 获取所有以"P"开头的列,生成P列>0的布尔矩阵 p_columns = sales_filtered.filter(like='P').columns p_boolean = sales_filtered[p_columns] > 0 # 3. 按Month分组,对布尔列求和得到每个月的符合条件ID数 result_df = sales_filtered[['Month']].join(p_boolean).groupby('Month').sum() # 输出结果 print(result_df)
优势说明
- 避免Python循环:所有操作基于pandas底层的向量化运算,比逐列循环快数倍(数据量越大差距越明显)
- 逻辑简洁:一次性处理所有P列,无需单独遍历每个P列编写重复代码
- 结果自动对齐:分组求和后直接得到以
Month为索引、各P列为统计值的目标格式
内容的提问来源于stack exchange,提问作者Mufeez
相关产品推荐
相关产品推荐

