0

私は Python を初めて使用pandasし、一部のデータをリサンプリングするために使用するときに難しい質問に遭遇しました。

時系列データをリサンプリングする場合、算術平均関数を適用するのは非常に簡単です。

例えば:

が分周期tsの時系列データであるとします ( では、これは でオブジェクトにpandasカプセル化されます)。pandas.SeriesDatetimeIndex

5 分間の各グループの算術平均を取得するには、次のようにします。

ts.resample('5min', how='mean')

しかし、この方法で幾何平均を計算するにはどうすればよいでしょうか? たとえば、上記のような簡単な解決策はありますか。

ts.resample('5min', how='gmean')
4

1 に答える 1

6

howスカラーを返す限り、呼び出し可能なオブジェクト (この場合は関数) を に渡すことができます。

In [31]: from scipy.stats.mstats import gmean

In [32]: import pandas.util.testing as tm

In [33]: ts = tm.makeTimeSeries()[:10]

In [34]: ts
Out[34]:
2000-01-03    0.605
2000-01-04   -0.167
2000-01-05    0.365
2000-01-06   -0.206
2000-01-07   -1.156
2000-01-10   -0.219
2000-01-11    1.704
2000-01-12   -0.148
2000-01-13    1.169
2000-01-14    0.823
Freq: B, dtype: float64

In [35]: ts.resample('2D', how=lambda x: gmean(x).item())
Out[35]:
2000-01-03    0.605
2000-01-05    0.365
2000-01-07    0.000
2000-01-09    0.000
2000-01-11    1.704
2000-01-13    0.981
dtype: float64

ここでメソッドを呼び出してitemスカラー結果を取得する必要があることに注意してください (値によっては を取得できるためMaskedConstant)。pandas単一の要素Seriesをスカラーとは見なしません。

また、幾何平均を計算すると複雑な値が返される可能性がある s または値を含む計算の結果にも注意してくださいnan(たとえば、負の数の 4 乗根。これはnannumpy で返されます)。

gmeanメソッドを呼び出すと、このような計算は 0 になりますitem

たとえば、これが と にゼロがある理由2000-01-07です2000-01-09

2000-01-07pandas では 2 日目の a が入力されるためnan(ここで行っていることを思い出して2Dください)、幾何平均は として計算されma.exp(ma.mean(ma.log([-1.156, nan])))ます。これらの 2 つの値は への「有効な」入力ではないma.log(したがってマスクされている) ため、属性がであるをma.mean()返すため、そのメソッドは 0 を返します。MaskedConstant_data0item

于 2013-10-07T17:12:29.017 に答える