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

Pandas DataFrame按行统计1的个数报错:Series真值模糊

解决Pandas每行统计值为1的元素个数问题

错误原因

你用apply(axis=1)时,lambda里的参数其实是整行的Series对象,你的isOne函数直接拿整个Series和1比较,x == 1返回的是布尔值组成的Series,用if判断整个Series的真值会触发模糊性错误——Pandas不允许直接判断一个Series的真假,因为无法确定你要的是任意元素为真还是全部元素为真。

最简解决方案(推荐)

直接用Pandas的向量化操作,比apply效率高得多:

df.eq(1).sum(axis=1)
  • df.eq(1):生成和原DataFrame同形状的布尔DataFrame,每个位置标记是否等于1
  • sum(axis=1):横向(按行)求和,布尔值True会被当作1计算,False当作0,直接得到每行1的个数

用apply的修正方案

如果一定要保留apply的写法,修改逻辑,直接对行Series做统计:

# 自定义函数版
def count_one(row):
    return (row == 1).sum()

df.apply(count_one, axis=1)

# 简化lambda版
df.apply(lambda row: (row == 1).sum(), axis=1)

这里不需要单独的if判断,Pandas支持对Series做向量化比较,直接求和就能得到1的数量。

为什么你加any()/all()没用

你之前尝试加的any()/all()会把布尔Series转换成单个布尔值(比如any()返回True表示行里至少有一个1),再sum的结果只能是1或0,完全不是你要的统计个数,所以无效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 06:47:10