我的第一个想法是检索
posR
通过插入
posF
然后把这些价值观放到他们的新位置上——但正如你想要的那样
81
比这晚了一排,恐怕这不是你要找的,我仍然不知道你的任务背后的逻辑。
然而,也许这是一个起点,让我们看看……
这种方法的工作原理如下:
检索中值的新索引位置
波斯尔
按照他们的顺序
POSF
:
import numpy as np
idx = np.interp(df.posR, df.posF, df.index).round()
摆脱
nan
条目和强制转换为int:
idx = idx[np.isfinite(idx)].astype(int)
通过复制创建新列
POSF
在第一步,设置
newrfreq
到
南
分别:
df['newposR'] = df.posF
df['newrfreq'] = np.nan
然后用来自的值覆盖
波斯尔
和
rfreq
,但现在在更新的位置:
df.loc[idx, 'newposR'] = df.posR[:len(idx)].values
df.loc[idx, 'newrfreq'] = df.rfreq[:len(idx)].values
结果:
posF ffreq posR rfreq newposR newrfreq
0 10 0.50 11.0 0.08 11.0 0.08
1 20 0.20 31.0 0.90 20.0 NaN
2 30 0.03 41.0 0.70 31.0 0.90
3 40 0.72 51.0 0.08 41.0 0.70
4 50 0.09 81.0 0.78 51.0 0.08
5 60 0.09 NaN NaN 60.0 NaN
6 70 0.01 NaN NaN 70.0 NaN
7 80 0.09 NaN NaN 81.0 0.78
8 90 0.08 NaN NaN 90.0 NaN
9 100 0.02 NaN NaN 100.0 NaN