在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
相关产品推荐
相关产品推荐

