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

如何更高效判断DataFrame中指定地点的金额是否全为0?

更高效的Pandas地点金额全零判断实现

问题背景

你有如下结构的Pandas DataFrame,包含location、product、amount三列:

import pandas as pd

data = [['park', 'cookie', 2], ['park', 'muffin', 0], ['park', 'scone', 3], ['mall', 'cookie', 0], ['mall', 'muffin', 0], ['mall', 'scone', 0], ['store', 'cookie', 8]]
df = pd.DataFrame(data, columns=['location', 'product', 'amount']) 

需求是判断指定地点的所有amount是否全部为0,你当前的实现函数如下:

def location_has_nothing(loc):
    location_condition = df['location'] == loc
    amount_condition = df['amount'] != 0
    df_filtered = df[location_condition][amount_condition]
    return df_filtered.empty

当传入loc='park'时返回False,传入loc='mall'时返回True,希望找到更高效的实现方式。

优化方案

这里提供几种更简洁高效的实现思路:

1. 直接用all()方法判断(最直观)

直接筛选指定地点的amount列,用all()方法检查所有值是否都为0,逻辑清晰且性能更优:

def location_has_nothing(loc):
    return (df[df['location'] == loc]['amount'] == 0).all()

2. 提前分组预处理(适合频繁查询场景)

如果需要多次查询不同地点的状态,建议提前按location分组聚合,生成状态映射字典,后续查询直接O(1)取值:

# 预处理生成地点状态字典
location_status = df.groupby('location')['amount'].apply(lambda x: (x == 0).all()).to_dict()

# 查询函数
def location_has_nothing(loc):
    return location_status.get(loc, False)  # 不存在的地点默认返回False,可按需调整

这种方式仅需一次分组计算,后续查询效率极高,适合批量查询场景。

3. 规范原逻辑的写法(避免警告)

你的原代码使用了链式索引df[location_condition][amount_condition],可能触发SettingWithCopyWarning,建议改为一次筛选的规范写法:

def location_has_nothing(loc):
    df_filtered = df[(df['location'] == loc) & (df['amount'] != 0)]
    return df_filtered.empty

这和原逻辑一致,但写法更严谨,避免潜在的警告问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 21:41:00