如何比较两个DataFrame,返回满足±10范围的ID与区间记录
解决方法
假设你的两个DataFrame包含ID、range和数值列(以下示例用value指代数值列),可以通过以下步骤实现需求:
1. 关联两个DataFrame
通过ID将两个DataFrame做内连接,确保只保留两边共同存在的ID记录:
import pandas as pd merged_df = pd.merge(df1, df2, on='ID', suffixes=('_df1', '_df2'))
2. 计算差值并筛选符合条件的记录
计算两数值列的差值,筛选出差值在[-10, 10]范围内的行:
merged_df['diff'] = merged_df['value_df1'] - merged_df['value_df2'] filtered_df = merged_df[(merged_df['diff'] >= -10) & (merged_df['diff'] <= 10)]
3. 提取目标结果
从筛选后的结果中提取两个DataFrame对应的ID和range列:
result = filtered_df[['ID', 'range_df1', 'range_df2']] # 可选:重命名列让结果更直观 result = result.rename(columns={'range_df1': 'df1_range', 'range_df2': 'df2_range'})
完整示例
# 模拟示例数据 df1 = pd.DataFrame({ 'ID': [1, 2, 3, 4], 'range': ['A1', 'B2', 'C3', 'D4'], 'value': [50, 75, 30, 90] }) df2 = pd.DataFrame({ 'ID': [1, 2, 3, 4], 'range': ['X1', 'Y2', 'Z3', 'W4'], 'value': [55, 82, 25, 105] }) # 执行处理流程 merged_df = pd.merge(df1, df2, on='ID', suffixes=('_df1', '_df2')) merged_df['diff'] = merged_df['value_df1'] - merged_df['value_df2'] filtered_df = merged_df[(merged_df['diff'] >= -10) & (merged_df['diff'] <= 10)] result = filtered_df[['ID', 'range_df1', 'range_df2']] print(result)
示例输出
ID range_df1 range_df2 0 1 A1 X1 1 2 B2 Y2 2 3 C3 Z3
(注:ID=4的记录差值为-15,超出范围被排除)
内容的提问来源于stack exchange,提问作者user20250014
相关产品推荐
相关产品推荐

