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

在Pandas中比较多列值,统计D列小于其他列的次数并生成Count列

嘿,这个需求很常见,我给你两个实用的实现方式,其中第一个是效率最高的向量化操作,非常适合处理大数据量的DataFrame!

方法1:使用Pandas向量化比较(推荐)

这种方法利用Pandas的内置函数,完全避免逐行循环,速度快到飞起。核心思路是把A、B、C三列和D列做小于比较,得到布尔值矩阵,再对每行求和(因为True等价于1,False等价于0)。

代码示例:

import pandas as pd

# 构造符合你示例的样例数据
data = {
    'A': [10, 5, 8, 3],
    'B': [12, 7, 6, 4],
    'C': [15, 9, 7, 5],
    'D': [16, 8, 7, 3]
}
df = pd.DataFrame(data)

# 计算Count列
df['Count'] = df[['A', 'B', 'C']].lt(df['D'], axis=0).sum(axis=1)

print(df)

运行结果:

A   B   C   D  Count
0  10  12  15  16      0
1   5   7   9   8      1  # D=8 < C=9,所以次数为1
2   8   6   7   7      1  # D=7 < A=8,所以次数为1
3   3   4   5   3      2  # D=3 < B=4、C=5,所以次数为2

代码解释:

  • df[['A', 'B', 'C']].lt(df['D'], axis=0):lt是"less than"的缩写,会逐行比较A/B/C列的值是否小于D列对应行的值,生成一个布尔型DataFrame。
  • .sum(axis=1):对每行的布尔值求和,统计True的数量,也就是D小于A/B/C的次数。

方法2:使用apply逐行处理(适合小数据量)

如果你的DataFrame行数不多,也可以用apply逐行遍历计算,代码更直观,但效率不如向量化操作。

代码示例:

df['Count'] = df.apply(
    lambda row: sum(row[col] > row['D'] for col in ['A', 'B', 'C']),
    axis=1
)

代码解释:

  • 用lambda函数遍历每一行,检查A/B/C列的值是否大于D列的值(等价于D小于该列),然后统计符合条件的数量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:36:10