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

如何遍历df1的day列在df2中查找最近2个值并添加至df1新列

实现DataFrame间最近值匹配并扩展列

需求说明

遍历df1的day列每个值,在df2中查找与之最接近的2个值,将对应day和rate分别存入df1的新列day1、day2、rate1、rate2。

数据准备

创建df1:

import numpy as np
import pandas as pd

data1 = np.array([(1, 150), (2, 250), (3, 350), (4, 590)])
df1 = pd.DataFrame(data1, columns=['n', 'day'])

df1内容:

n   day
0   1   150
1   2   250
2   3   350
3   4   590

创建df2:

data2 = np.array([(120, 10.5), (180, 10.7), (350, 11.2), (620, 15.5)])
df2 = pd.DataFrame(data2, columns=['day', 'rate'])

df2内容:

day  rate
0   120  10.5
1   180  10.7
2   350  11.2
3   620  15.5

已实现的单值查找函数

用于查找单个值在df2中最接近的2个记录:

# 查找最接近的n个值
def find_rates(df, s, x, n=2):
    diff = (s - x).abs()
    return df.loc[diff.nsmallest(n).index].sort_index()

示例调用:

find_rates(df2, df2.day, 150, n=2)

返回结果:

day  rate
0  120.0  10.5
1  180.0  10.7

批量处理实现

通过apply遍历df1的day列,将每个值的匹配结果展开为对应列,再合并到原DataFrame:

# 处理单个day值,返回展开后的day1、day2、rate1、rate2
def process_day(x):
    res = find_rates(df2, df2.day, x)
    return pd.Series([
        res.iloc[0]['day'], 
        res.iloc[1]['day'], 
        res.iloc[0]['rate'], 
        res.iloc[1]['rate']
    ])

# 应用函数并合并列
result = pd.concat([df1, df1['day'].apply(process_day)], axis=1)
# 重命名新列
result.columns = ['n', 'day', 'day1', 'day2', 'rate1', 'rate2']

最终结果

print(result)

输出:

n    day   day1   day2  rate1  rate2
0  1.0  150.0  120.0  180.0   10.5   10.7
1  2.0  250.0  180.0  350.0   10.7   11.2
2  3.0  350.0  180.0  350.0   10.7   11.2
3  4.0  590.0  350.0  620.0   11.2   15.5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:08:10