0

だから私は力ずくでこれを行うことができますが、それは痛々しいほど遅いので、何かが欠けていると確信しています.

15 日などの固定長の (毎日の) DatetimeIndex を作成したいとしますが、いくつかの注意点があります。

  • 15 日間インデックスが週末に終了する場合、実際にはインデックスの最後の金曜日に終了します。
  • 15 日間に検閲された日付が含まれる場合、検閲された日付は 15 日間のカウントにはカウントされません。また、検閲された日付は、15 日間をはるかに超えて実行される可能性があります。

ポイント 2 を詳しく説明するために、2018 年 1 月 1 日から開始するとしますが、2018 年 1 月 12 日から 2018 年 2 月 14 日までは検閲されているため、15 日間は次のようになります (ブルート フォース アプローチ)。

possible = pd.date_range(start='2018-01-01', end='2018-12-31')
censored = pd.date_range(start='2018-01-12', end='2018-02-14')

bforce = pd.DatetimeIndex(set(possible)\
            .difference(set(censored)))\
            .sort_values()[:15]

idx = pd.DatetimeIndex([d for d in bforce if d.weekday() not in (5,6)])

与える:

DatetimeIndex(['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04',
               '2018-01-05', '2018-01-08', '2018-01-09', '2018-01-10',
               '2018-01-11', '2018-02-15', '2018-02-16'],
              dtype='datetime64[ns]', freq=None)

どちらが正しい。最終的なインデックスではすべての週末を無視しましたが、実際には週末をカウントしないことで 15 日間の期間が押し出されるため、検閲された日付の値には含まれていませんでした。このインデックスは週末をカウントし (ただし、週末は使用しません)、計算された値が週末に当たる場合は、1 つ前の金曜日にのみ終了する必要があります。

上記は、明らかに混乱しています。これを行うためのよりクリーンな方法があることを願っています。特に、最初から必要以上に長いインデックスを事前に作成したり、複数の中間リストを作成したりしないでください。

4

0 に答える 0