python - 如何为一列中的每个元素找到另一列中最接近的元素?

标签 python pandas

情况如下。

我有两个 pandas 数据框:

  • df1,其中包含一列"p1",其中有 1895 行随机数,范围从 2.805 到 3.035(以下是前 20 行):
         p1
0       2.910
1       2.885
2       2.875
3       2.855
4       2.910
5       2.870
6       2.850
7       2.875
8       2.865
9       2.875
10      2.890
11      2.910
12      2.965
13      2.955
14      2.935
15      2.905
16      2.900
17      2.905
18      2.970
19      2.940
  • df2,包含两列,"p2""h"
    p2   h
0   2.7 256.88
1   2.8 253.52
2   2.9 250.18
3   3.0 246.86
4   3.1 243.55

目标是首先循环遍历 df1 中的所有行,并在 p2 中找到每行最接近的元素。例如对于 p1[0] = 2.910,最接近的元素是 p2[2] = 2.9

  • 然后,如果这两个值相同,则该行的输出是 h 对应的值
  • 否则,输出是 h 之前和后续值的平均值。

回到我们的示例,p1[0] 的输出因此应为 (h[1]+h[3])/2

我希望这一切都有道理,这是我的第一个问题:)。 谢谢!

最佳答案

这是merge_asof的用法,注意allow_exact_matches=True默认为True,例如在本例中2.9最接近的是2.9

df1=df1.sort_values('p1')
s1=pd.merge_asof(df1,df2,left_on='p1',right_on='p2',direction='backward')
s2=pd.merge_asof(df1,df2,left_on='p1',right_on='p2',direction='forward')
df1['Value']=(s1.h+s2.h)/2

关于python - 如何为一列中的每个元素找到另一列中最接近的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56728226/

相关文章:

python - 我不明白为什么我的数据集中的列是 NaN

python - 计算两个 pandas DataFrame 的字符串之间的距离

python - Flask 错误 werkzeug 路由故障排除

python - 设置代理让keras/tensorflow下载需要的json

python - Mypy 拒绝使用 `type(name, (bases,), {})` 创建的类型对象

python - 如何在条形图顶部添加一条线?

python - 从 Python 中的颜色字典中绘制不同颜色的线条

python - 如何使用设置差异比较 pandas DataFrame

python - R 相当于 python numpy slice : [:, 无,:]

python - 带有pyparsing的Markdown语法,正确获取空格