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

Pandas DataFrame列值差值计算:求最小差值并关联原数据

Pandas:为df1每行计算与df2指定列所有值的差值最小值

核心需求

给df1的B列每个值,计算其与df2的D列所有值的差值,取最小值后添加到df1对应行。

示例数据

import pandas as pd

data1 = [[0.1, 0.5], [0.11, 0.4]]
df1 = pd.DataFrame(data1, columns=['A', 'B'])
data2 = [[-0.6, 0.33], [0.47, 0.9],[0.21, 0.76], [-0.7, 0.01]]
df2 = pd.DataFrame(data2, columns=['C', 'D'])

方法一:广播运算(高效适配大数据)

利用Numpy广播机制直接生成所有差值的二维数组,再逐行取最小值,性能远高于apply,适合你提到的10行+20行甚至更大规模的数据:

# 计算差值并取每行最小值,添加为新列
df1['min_diff'] = (df1['B'].values[:, None] - df2['D'].values).min(axis=1)

执行后df1结果:

ABmin_diff
00.100.50-0.40
10.110.40-0.50

方法二:apply方法(直观易读,小数据友好)

通过apply遍历df1['B']的每个值,逐次计算与df2['D']的差值最小值,代码更直观,适合小规模数据:

df1['min_diff'] = df1['B'].apply(lambda x: (x - df2['D']).min())

补充:取绝对值最小的差值(常见场景)

如果你的实际需求是找最接近的数值(即差值的绝对值最小),只需对差值取绝对值后再取最小值:

# 广播方式
df1['abs_min_diff'] = abs(df1['B'].values[:, None] - df2['D'].values).min(axis=1)

# apply方式
df1['abs_min_diff'] = df1['B'].apply(lambda x: abs(x - df2['D']).min())

示例中abs_min_diff结果为[0.17, 0.07],对应0.5最接近0.33,0.4最接近0.33。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 20:15:39