0

我正在寻找一种在两个值(A 和 G)之间进行插值的方法,使得插值的总和等于第二个值(G),最好是插值之间的距离是线性/大小相等的。

我得到的是:

标签 价值
一个 0
C
D
F
G 10

...我想解决这个问题:

标签 价值
一个 0
2
C 2
D 2
2
F 2
G 10

不幸的是,该功能pandas.interpolate不允许这样做。我可以使用类似的方法在这些列中手动创建部分,numpy.linspace但这似乎是一个相当临时的解决方案,对于需要插值的索引不规则地分散在行中的较大表来说并不是特别有效。

在 Python 中执行此操作的最有效方法是什么?

4

1 回答 1

0

我不知道这是否是最有效的方法,但它适用于任何数量的休息,包括没有,只使用 numpy 和 pandas:

df['break'] = np.where(df['Value'].notnull(), 1, 0)
df['group'] = df['break'].shift().fillna(0).cumsum()
df['Value'] = df.groupby('group').Value.apply(lambda x: x.fillna( x.max() / (len(x)-1) ) )

由于 NaN 和零,您将从基础 numpy 计算中收到一些警告,但替换仍然有效。

RuntimeWarning: invalid value encountered in double_scalars

RuntimeWarning: divide by zero encountered in double_scalars

于 2021-12-10T14:58:26.220 回答