3

私は次のpython pandas時系列を持っています

index = pandas.date_range('4/1/2012','9/30/2012', freq='M')
df = pandas.DataFrame(numpy.random.randn(len(index),1), index=index)
df = 
2012-04-30 1.06
2012-05-31 0.82
2012-06-30 0.65
2012-07-31 1.12
2012-08-31 1.09
2012-09-30 0.65

次に、頻度を 1 か月から 2 か月に変更します

df_new = df.resample('2M')

リサンプル機能は、最も古い日付から最後の日付まで開始します。私が得る出力は次のとおりです。

df_new = 
2012-04-30 ...
2012-06-30 ...
2012-08-31 ...
2012-10-30 ...

一方、アルゴリズムを逆の順序でリサンプリングする必要があります。次のような出力が必要です。

df_new = 
2012-05-31 ...
2012-07-31 ...
2012-09-30 ...

誰でもこれを手伝ってもらえますか..事前に感謝します

4

3 に答える 3

4

OK、これは本来よりも複雑です-しかしここに行きます

In [282]: df
Out[282]:
                   0
2012-04-30  0.583255
2012-05-31 -0.247403
2012-06-30  0.816290
2012-07-31 -1.989587
2012-08-31  0.740463
2012-09-30  0.971749


In [279]: df.resample('2M', how='last', closed='left', loffset='-1M')
Out[279]:
                   0
2012-05-31 -0.247403
2012-07-31 -1.989587
2012-09-30  0.971749


how='last' gets last value in group
closed='left' forces first date[2012-04-30] to be the start of the group (maybe side effect)
loffset='-1M' adjust label appropriately
于 2013-03-21T16:43:32.010 に答える
1

loffset次のパラメーターを使用します。

In [8]: df
Out[8]:
                   0
2012-04-30  0.667305
2012-05-31 -1.353332
2012-06-30  0.132986
2012-07-31 -0.697344
2012-08-31 -1.043487
2012-09-30 -0.050352

In [9]: df.resample('2M', loffset='M')
Out[9]:
                   0
2012-05-31  0.667305
2012-07-31 -0.610173
2012-09-30 -0.870416
2012-11-30 -0.050352
于 2013-03-21T16:01:22.300 に答える
0

これらのことは、最初に予想するよりもはるかにトリッキーになる傾向があります。正確な位置合わせがどうあるべきかについて非常に明確な例を示すことが役立つというチャンの意見に同意します。この例の入力データにも月次の頻度があることも重要であることに注意してください。上記のソリューションからの最終的な調整は、たとえば入力頻度が日である場合に変更されます。次を参照してください。

import pandas as pd

index = pd.date_range('4/1/2012','9/30/2012', freq='D')
df = pd.DataFrame({'Date': index, 'Doy': index.dayofyear}, index=index) 

df.resample('2M', how='last', closed='left', loffset='-1M')

                           Date  Doy
2012-04-30  2012-05-30 00:00:00  151
2012-06-30  2012-07-30 00:00:00  212
2012-08-31  2012-09-29 00:00:00  273
2012-10-31  2012-09-30 00:00:00  274

または、「MS」周波数を使用して、さらに別のアプローチを作成することもできます。

df.resample('2MS', how='last', loffset='2M')

                           Date  Doy
2012-05-31  2012-05-31 00:00:00  152
2012-07-31  2012-07-31 00:00:00  213
2012-09-30  2012-09-30 00:00:00  274

すべては、ビンの開始と終了をどのように定義するかにかかっています。

于 2013-03-22T08:31:05.610 に答える