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

如何用Pandas匹配数据集并按频率条件过滤剔除行

Pandas高效过滤匹配Pinout频率范围的方法

直接用Pandas的合并+矢量化布尔过滤就能搞定,比for循环高效得多,尤其适合大型数据集。具体步骤如下:

1. 合并两个数据集(匹配Pinout)

先用merge把DF2里的频率上下限关联到DF1对应的Pinout行上,这样每一行都能拿到自己对应的频率范围:

# 假设DF1包含Pinout、Frequency等列;DF2包含Pinout、Min_limit、Max_limit列
merged_df = df1.merge(df2, on='Pinout', how='left')
  • how='left'会保留DF1所有行,若某个Pinout在DF2中不存在,对应的Min/Max会是NaN,后续可以选择过滤掉这些行。
  • 如果只需要保留DF2中存在的Pinout数据,换成how='inner'即可。

2. 过滤频率在范围内的行

用布尔索引筛选出Frequency在Min_limit和Max_limit之间的行:

filtered_df = merged_df[(merged_df['Frequency'] >= merged_df['Min_limit']) & 
                        (merged_df['Frequency'] <= merged_df['Max_limit'])]

这一步是矢量化操作,比逐行循环快几个数量级,完全适配大型数据集。

3. 清理多余列(可选)

如果不需要保留Min_limit和Max_limit列,直接删掉:

filtered_df = filtered_df.drop(columns=['Min_limit', 'Max_limit'])

完整示例代码

import pandas as pd

# 模拟示例数据
df1 = pd.DataFrame({
    'Pinout': ['A', 'A', 'B', 'B', 'C'],
    'Channel': [1, 2, 1, 3, 2],
    'Frequency': [50, 25000, 30, 15000, 10]  # 其中25000和10超出范围
})

df2 = pd.DataFrame({
    'Pinout': ['A', 'B'],
    'Min_limit': [20, 20],
    'Max_limit': [20000, 20000]
})

# 合并+过滤
merged_df = df1.merge(df2, on='Pinout', how='left')
filtered_df = merged_df[(merged_df['Frequency'] >= merged_df['Min_limit']) & 
                        (merged_df['Frequency'] <= merged_df['Max_limit'])].drop(columns=['Min_limit', 'Max_limit'])

print(filtered_df)

输出结果会自动剔除频率超标的行(Pinout A的25000Hz、Pinout C的10Hz)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:02:07