情况如下。
我有两个 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/