2

次の方法論を使用してを構築するpandas.DataFrameと、(私が思うに)独特の出力が得られます。

import pandas, numpy

df = pandas.DataFrame(
    numpy.random.rand(100,2), index = numpy.arange(100), columns = ['s1','s2'])
smoothed = pandas.DataFrame(
    pandas.ewma(df, span = 21), index = df.index, columns = ['smooth1','smooth2'])

平滑化された値を見に行くと、次のようになります。

>>> smoothed.tail()
smooth1  smooth2
95      NaN      NaN
96      NaN      NaN
97      NaN      NaN
98      NaN      NaN
99      NaN      NaN

これは、次の断片化された呼び出しの集約のようであり、異なる結果が得られます。

smoothed2 = pandas.DataFrame(pandas.ewma(df, span = 21))
smoothed2.index = df.index
smoothed2.columns = ['smooth1','smooth2']

再びDataFrame.tail()私が得る呼び出しを使用して:

>>> smoothed2.tail()
smooth1   smooth2
95  0.496021  0.501153 
96  0.506118  0.507541
97  0.516655  0.544621
98  0.520212  0.543751
99  0.518170  0.572429

なぜこれらをDataFrame構築方法論とは異なるものにする必要があるのか​​について、誰かが理論的根拠を提供できますか?

4

1 に答える 1

5

の結果ewma(df, span=21)はすでにDataFrameであるため、列のリストとともにDataFrameコンストラクターに渡すと、渡した列が「選択」されます。この特定のケースでは、ラベルとデータの間のリンクを解除することは困難です。代わりに行った場合:

In [23]: smoothed = DataFrame(ewma(df, span = 21).values, index=df.index, columns = ['smooth1','smooth2'])
In [24]: smoothed.head()
Out[24]: 
    smooth1   smooth2
0  0.218350  0.877693
1  0.400214  0.813499
2  0.308564  0.739426
3  0.433341  0.641891
4  0.525260  0.620541

それは問題ありません。もちろん

smoothed = ewma(df, span=21)
smoothed.columns = ['smooth1', 'smooth2']

完全に元気です

于 2012-02-23T21:25:24.913 に答える