0

インデックス値を複数のsまたはSeries間で整列させようとして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を使用しています

ありがとう。

4

2 に答える 2

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)
于 2012-05-07T16:59:02.000 に答える
0

基礎となる数学は、補間の合計が合計の補間に等しいことを適用するとは思わない。特別な場合にのみ成立します

于 2012-05-07T16:26:42.493 に答える