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

如何基于阈值列表筛选DataFrame?求Python/R实现代码

Python 实现

核心思路是先将两个DataFrame按target字段合并,把对应阈值匹配到每条数据上,再进行筛选,无需写大量条件判断。

import pandas as pd

# 替换为你的实际数据加载方式(比如pd.read_csv)
df_a = pd.DataFrame({
    'target': ['SDOIII', 'SDOII', 'SoxH', 'SDOIII', 'LbpA1', 'SoxH', 'SoxH'],
    'query.': ['a', 'a', 'a', 'b', 'b', 'b', 'a'],
    'score': [92.8, 72.8, 66, 67, 18, 12, 7]
})

df_b = pd.DataFrame({
    'target': ['SDOIII', 'SDOII', 'SoxH', 'LbpA1'],
    'threshold': [4, 5, 6, 7]
})

# 左连接合并,保留A的所有行并匹配B的阈值
merged_df = pd.merge(df_a, df_b, on='target', how='left')

# 筛选score大于等于对应阈值的行
filtered_df = merged_df[merged_df['score'] >= merged_df['threshold']]

# 可选:移除阈值列(如果不需要保留)
filtered_df = filtered_df.drop('threshold', axis=1)

print(filtered_df)
R 实现

使用dplyr包的连接和筛选函数,同样通过合并避免大量条件:

library(dplyr)

# 替换为你的实际数据加载方式(比如read.csv)
df_a <- data.frame(
  target = c("SDOIII", "SDOII", "SoxH", "SDOIII", "LbpA1", "SoxH", "SoxH"),
  query. = c("a", "a", "a", "b", "b", "b", "a"),
  score = c(92.8, 72.8, 66, 67, 18, 12, 7)
)

df_b <- data.frame(
  target = c("SDOIII", "SDOII", "SoxH", "LbpA1"),
  threshold = c(4, 5, 6, 7)
)

# 合并数据并筛选
filtered_df <- df_a %>%
  left_join(df_b, by = "target") %>%
  filter(score >= threshold) %>%
  select(-threshold) # 可选:移除阈值列

print(filtered_df)

说明

  • 合并操作会自动将每个target对应的阈值匹配到DataFrame A的每一行,无论有多少个target都能轻松处理。
  • 如果DataFrame A中存在DataFrame B没有的target,合并后阈值会是NA,这类行会被筛选自动排除(因为NA参与比较返回FALSE)。若需特殊处理这类情况,可以在筛选前添加逻辑判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:20:19