1

一連の時間料金があります。各料金は 1 時間全体で有効です。これらの価格を Pandas で表現し、任意のより高い頻度 (分や秒など) でインデックスを付けて演算を行うことができるようにする最良の方法は何ですか?

データの詳細

サンプル価格は次のとおりです。

>>> prices = Series(randn(5), pd.date_range('2013-01-01 12:00', periods = 5, freq='H'))
>>> prices
2013-01-01 12:00:00   -1.001692
2013-01-01 13:00:00   -1.408082
2013-01-01 14:00:00   -0.329637
2013-01-01 15:00:00    1.005882
2013-01-01 16:00:00    1.202557
Freq: H

13:37:42では、値が必要な場合(13:00 と同じであると予想されます)、どの表現を使用すればよいでしょうか?

>>> prices['2013-01-01 13:37:42']
...
KeyError: <Timestamp: 2013-01-01 13:37:42>

リサンプリング

価格を再サンプリングして詳細を入力できることはわかっていますが ( ffill、そうですか?)、それはあまり良い解決策とは思えません。インデックスを作成する頻度を想定する必要があり、読みやすさが低下するからです。不要なデータ ポイントが多すぎます。

期間

一見すると a が機能してPeriodIndexいるように見えます

>>> price_periods = prices.to_period()
>>> price_periods['2013-01-01 13:37:42']
-1.408082

しかし、時系列のシリーズは、Series. amounts特定の瞬間に購入したアイテムの数を示す別のシリーズがあるとします。価格を計算したい場合は、2 つの系列を乗算する必要があります。

>>> amounts = Series([1,2,2], pd.DatetimeIndex(['2013-01-01 13:37', '2013-01-01 13:57', '2013-01-01 14:05']))
>>> amounts*price_periods

しかし、例外が発生し、IPy Notebook がフリーズすることさえあります。インデックス作成も役に立ちません。

>>> ts_periods[amounts.index]

構造はまだ進行中ですかPeriodIndex、それともこれらの機能は追加されませんか? 私が使用すべきだった他の構造はありますか (または、PeriodIndex成熟する前に今のところ使用する必要があります)? 私はパンダバージョンを使用して0.9.0.dev-1e68fd9います。

4

1 に答える 1

3

小切手asof

prices.asof('2013-01-01 13:37:42')

以前の利用可能な日時の値を返します。

prices['2013-01-01 13:00:00']

計算を行うには、次を使用できます。

prices.asof(amounts.index) * amounts

これは、金額のインデックスとそれぞれの値を含むシリーズを返します。

>>> prices
2013-01-01 12:00:00    0.943607
2013-01-01 13:00:00   -1.019452
2013-01-01 14:00:00   -0.279136
2013-01-01 15:00:00    1.013548
2013-01-01 16:00:00    0.929920

>>> prices.asof(amounts.index)
2013-01-01 13:37:00   -1.019452
2013-01-01 13:57:00   -1.019452
2013-01-01 14:05:00   -0.279136

>>> prices.asof(amounts.index) * amounts
2013-01-01 13:37:00   -1.019452
2013-01-01 13:57:00   -2.038904
2013-01-01 14:05:00   -0.558272
于 2013-01-07T14:43:03.790 に答える