You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过聚合函数筛选总库存>0的Pandas DataFrame店铺记录?

Pandas筛选总库存>0的店铺所有记录

需求说明

从给定的DataFrame中,保留所有总库存大于0的店铺的全部记录,排除总库存为0的店铺(如示例中的store2)。

实现方法

方法一:使用groupby + transform直接标记筛选

这种方法无需额外存储店铺列表,直接通过transform生成与原数据同长度的判断序列,一步完成筛选:

import pandas as pd

# 构造示例DataFrame
data = {
    'STORE': ['store1', 'store1', 'store2', 'store2', 'store3', 'store3'],
    'PRODUCT': ['a', 'b', 'a', 'b', 'a', 'b'],
    'INVENTORY': [1, 0, 0, 0, 1, 1]
}
df = pd.DataFrame(data, index=[1,2,3,4,5,6])

# 生成每个店铺的总库存判断序列
has_positive_inventory = df.groupby('STORE')['INVENTORY'].transform('sum') > 0

# 筛选符合条件的记录
filtered_df = df[has_positive_inventory]
print(filtered_df)

方法二:先获取有效店铺列表再筛选

如果需要单独保存有效店铺的列表,可以先计算总库存筛选出店铺,再用isin匹配:

import pandas as pd

# 构造示例DataFrame
data = {
    'STORE': ['store1', 'store1', 'store2', 'store2', 'store3', 'store3'],
    'PRODUCT': ['a', 'b', 'a', 'b', 'a', 'b'],
    'INVENTORY': [1, 0, 0, 0, 1, 1]
}
df = pd.DataFrame(data, index=[1,2,3,4,5,6])

# 筛选出总库存>0的店铺
valid_stores = df.groupby('STORE')['INVENTORY'].sum().loc[lambda x: x > 0].index

# 匹配筛选记录
filtered_df = df[df['STORE'].isin(valid_stores)]
print(filtered_df)

两种方法最终都会输出目标结果:

STORE PRODUCT  INVENTORY
1  store1       a          1
2  store1       b          0
5  store3       a          1
6  store3       b          1

内容的提问来源于stack exchange,提问作者Ari Frid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 14:25:42