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

使用Pandas统计无分组订单无折扣码交易数并修正空值判断错误

解决判断NaN值错误及统计无折扣订单数量的问题

嗨,我来帮你搞定这个问题!首先咱们得搞清楚为什么你的代码会返回全0的结果——这是因为在Python里,绝对不能用== np.NaN来判断缺失值!

错误原因分析

NaN(Not a Number)的特性很特殊:它和任何值做比较(包括它自己)都会返回False。你可以在控制台里试试np.NaN == np.NaN,结果肯定是False。所以你的np.where(df['discount_code']==np.NaN,1,0)永远只会触发0的分支,自然得到全0的结果。

正确的解决方法

我们需要用专门判断缺失值的方法,这里推荐两种靠谱的方式:

方法1:使用Pandas内置的isna()/isnull()(两者等价)

这是最通用的方法,不管你的discount_code是数值型还是字符串型(object dtype)都能正常工作:

import numpy as np
import pandas as pd

# 假设你的DataFrame是df
df['disc_is_null'] = np.where(df['discount_code'].isna(), 1, 0)

方法2:直接将布尔值转为整数

Pandas的布尔序列可以直接用astype(int)转成1/0,代码更简洁:

df['disc_is_null'] = df['discount_code'].isna().astype(int)

运行上面任意一段代码后,你就能得到期望的结果:

order_name discount_code disc_is_null
126 #1137 NaN 1
127 #1139 Earlybird 0
128 #1140 NaN 1
129 #1140 NaN 1
130 #1141 Tango 0

统计未使用折扣码的交易数量

你的最终需求是统计**唯一订单(order_name)**的数量(因为同一个订单可能对应多个产品行),所以需要先筛选出无折扣的行,再对order_name去重后计数:

# 统计唯一的无折扣订单数量
unique_no_discount_orders = df[df['discount_code'].isna()]['order_name'].nunique()
print(f"未使用折扣码的交易数量:{unique_no_discount_orders}")

针对你的示例数据集,这个代码会返回2(对应#1137和#1140两个订单)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 20:08:04