我正在尝试在多个DataFrame
或系列之间对齐我的索引值,而我正在使用
Series.interpolate但它似乎没有正确插值。或许我误解了一些事情。这是一个小例子:
x1 = np.array([0, 0.25, 0.77, 1.2, 1.4, 2.6, 3.1])
y1 = np.array([0, 1.1, 0.5, 1.5, 1.2, 2.1, 2.4])
x2 = np.array([0, 0.25, 0.66, 1.0, 1.2, 1.4, 3.1])
y2 = np.array([0, 0.2, 0.8, 1.1, 2.2, 0.1, 2.4])
df1 = DataFrame(data=y1, index=x1, columns=['A'])
df1.plot(marker='o')
df2 = DataFrame(data=y2, index=x2, columns=['A'])
df2.plot(marker='o')
df3=df1 - df2
df3.plot(marker='o')
print df3
def resample(signals):
aligned_x_vals = reduce(lambda s1, s2: s1.index.union(s2.index), signals)
return map(lambda s: s.reindex(aligned_x_vals).apply(Series.interpolate), signals)
sig1, sig2 = resample([df1, df2])
sig3 = sig1 - sig2
plt.plot(df1.index, df1.values, marker='D')
plt.plot(sig1.index, sig1.values, marker='o')
plt.grid()
plt.figure()
plt.plot(df2.index, df2.values, marker='o')
plt.plot(sig2.index ,sig2.values, marker='o')
plt.grid()
我希望sig1和sig2有比df1和df2更多的点,但插值的值。有几点不重叠。这是错误还是用户错误?我正在使用v0.7.3
感谢。
答案 0 :(得分:1)
可能是一个错误。查看源代码时,Series.interpolate
在进行插值时不会查看索引值。它假设它们间隔相等,只使用len(serie)
作为索引。也许这是意图,它不是一个错误。我不确定。
我修改了Series.interpolate
方法并提出了这个interpolate
函数。这将做你想要的。
import numpy as np
from pandas import *
def interpolate(serie):
try:
inds = np.array([float(d) for d in serie.index])
except ValueError:
inds = np.arange(len(serie))
values = serie.values
invalid = isnull(values)
valid = -invalid
firstIndex = valid.argmax()
valid = valid[firstIndex:]
invalid = invalid[firstIndex:]
inds = inds[firstIndex:]
result = values.copy()
result[firstIndex:][invalid] = np.interp(inds[invalid], inds[valid],
values[firstIndex:][valid])
return Series(result, index=serie.index, name=serie.name)
答案 1 :(得分:0)
我不认为基础数学应用插值总和等于和的插值。它只适用于特殊情况