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

如何在Pandas中按p列阈值范围循环合并r_df与s_df?

我来帮你搞定这个循环合并的需求!核心思路就是遍历一系列你需要的p值阈值,每次筛选出s_df中符合条件的行,再和r_df合并。下面给你两种实用的实现方案,你可以根据自己的需求选:

循环按p列阈值合并DataFrame

1. 按固定间隔遍历阈值(比如0到1,步长0.1)

如果想按均匀间隔设置阈值(比如从0.0到1.0,每0.1一个台阶),可以用numpy.linspace生成阈值列表,然后循环处理:

import pandas as pd
import numpy as np

# 先模拟测试数据(替换成你自己的r_df和s_df就行)
r_df = pd.DataFrame({'C1': ['A', 'B', 'C', 'D'], 'value_r': [10, 20, 30, 40]})
s_df = pd.DataFrame({'C1': ['A', 'A', 'B', 'C', 'D'], 'p': [0.1, 0.3, 0.2, 0.5, 0.9]})

# 生成从0到1的阈值列表,步长0.1,一共11个值(包含0和1)
thresholds = np.linspace(0, 1, 11)

# 用字典保存每个阈值对应的合并结果,方便后续查看
merged_results = {}
for threshold in thresholds:
    # 筛选s_df中p<=当前阈值的行
    filtered_s = s_df.loc[s_df['p'] <= threshold]
    # 和r_df按C1列合并
    merged_df = pd.merge(filtered_s, r_df, on='C1')
    # 把结果存入字典,键就是当前阈值
    merged_results[threshold] = merged_df

# 举个例子,查看阈值为0.2时的合并结果
print(merged_results[0.2])

2. 自定义阈值列表

如果你的阈值是特定的数值(比如0.2、0.35、0.7、1.0这种非均匀的),直接定义一个列表就行,逻辑和上面差不多:

# 自定义你需要的阈值列表
custom_thresholds = [0.2, 0.35, 0.7, 1.0]

merged_results_custom = {}
for thresh in custom_thresholds:
    # 这里也可以不用.loc,直接用布尔索引筛选
    filtered_s = s_df[s_df['p'] <= thresh]
    # 可以指定合并方式,默认是inner,需要的话改成left/right/outer
    merged_df = pd.merge(filtered_s, r_df, on='C1', how='inner')
    merged_results_custom[thresh] = merged_df

# 遍历输出所有结果,方便检查
for thresh, df in merged_results_custom.items():
    print(f"=== 阈值为{thresh}的合并结果 ===")
    print(df)
    print("\n")

小提示

  • 如果你不需要保存所有结果,而是要对每个合并后的DataFrame做后续操作(比如统计、导出CSV),直接在循环里执行对应的代码就行,不用存字典。
  • 合并方式可以根据需求调整:比如想保留r_df的所有行,就把how设为'right';想保留筛选后s_df的所有行,就设为'left'。
  • 如果数据量很大,阈值又多,可以先给s_df按p列排序,这样筛选会更快一点,不过小数据量的话完全没必要。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:26:26