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

Pandas如何统计每行中大于另一DataFrame对应阈值的元素数量

Pandas 实现方案

如果已经有实际业务数据可以跳过测试数据构造步骤:

import pandas as pd

# 构造测试用df1
df1 = pd.DataFrame({
    "Col1": ["ID1", "ID2", "ID3"],
    "Col2": [2, 7, 9],
    "Col3": [3, 6, 16],
    "Col4": [5, 11, 20],
    "Col5": [0, 5, 12]
})

# 构造测试用df2
df2 = pd.DataFrame({
    "Col1": ["ID1", "ID2", "ID3"],
    "ColB": [2, 7, 9]
})

方法1:矢量化运算(推荐,大数据量下效率更高)

无需逐行遍历,直接用Pandas内置向量化操作完成计算:

# 生成Col1对应阈值的映射关系
threshold = df1["Col1"].map(df2.set_index("Col1")["ColB"])
# 选取所有数值列(这里用iloc取Col1之后的所有列,也可手动指定列名列表),统计每行大于阈值的元素个数
df1["COUNT"] = df1.iloc[:, 1:].gt(threshold, axis=0).sum(axis=1)

代码说明:

  • df2.set_index("Col1")["ColB"]将df2转为Col1为索引、ColB为值的序列,方便快速匹配每行对应的阈值
  • gt()是Pandas的大于比较方法,axis=0表示每行的所有元素都和该行对应的阈值做比较
  • sum(axis=1)按行对比较结果(True/False等价于1/0)求和,直接得到符合条件的元素数量

方法2:合并表后计算

适合需要保留阈值列排查问题的场景:

# 关联两个表获取每行对应的阈值
df_temp = df1.merge(df2, on="Col1", how="left")
# 统计符合条件的元素个数
df_temp["COUNT"] = df_temp[["Col2", "Col3", "Col4", "Col5"]].gt(df_temp["ColB"], axis=0).sum(axis=1)
# 剔除多余的ColB列得到最终结果
df1 = df_temp.drop("ColB", axis=1)

两种方法得到的最终df1都和需求的预期结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:48:00