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

如何非逐行迭代修改Pandas DataFrame列值并按条件删除行

Pandas 高效处理相似项与分数过滤问题

需求说明

给定包含主项、3个相似项及对应相似度分数的DataFrame,需完成两个操作:

  • 若某相似项的对应分数低于0.8,将该相似项列设为空字符串
  • 删除所有分数均低于0.8的行

原始数据

import pandas as pd

# 构造原始DataFrame
data = {
    0: ['python', 'coke', 'apple'],
    'top1': ['perl', 'diel_coke', 'car'],
    'top2': ['php', 'pepsi', 'house'],
    'top3': ['java', 'taco', 'hill'],
    'score1': [0.9, 0.85, 0.3],
    'score2': [0.7, 0.9, 0.1],
    'score3': [0.4, 0.23, 0.05]
}
df = pd.DataFrame(data)

原始DataFrame输出:

0       top1   top2  top3  score1  score2  score3
0  python      perl    php  java     0.9     0.7    0.40
1    coke  diel_coke  pepsi  taco     0.85    0.9    0.23
2   apple       car  house  hill     0.3     0.1    0.05

高效实现方案(无逐行迭代)

利用Pandas的矢量化操作完成处理,避免循环迭代带来的性能损耗:

1. 替换低分对应的相似项为空字符串

通过where方法,结合分数列的布尔条件批量修改top列:

# 匹配top列与对应score列
col_pairs = [('top1', 'score1'), ('top2', 'score2'), ('top3', 'score3')]

for top_col, score_col in col_pairs:
    # 仅保留分数>=0.8的相似项,其余设为空
    df[top_col] = df[top_col].where(df[score_col] >= 0.8, '')

2. 过滤全低分的行

通过ge(大于等于)和any方法,筛选出至少有一个分数达标(>=0.8)的行:

# 检查每行是否存在至少一个分数>=0.8,保留符合条件的行
df = df[df[['score1', 'score2', 'score3']].ge(0.8).any(axis=1)]

处理后结果

0       top1   top2 top3  score1  score2  score3
0  python      perl          0.9     0.7    0.40
1    coke  diel_coke  pepsi     0.85    0.9    0.23

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:50:39