2016-05-02 8 views
3

私のパンダのバージョンが0.18であると私は次のように見える分のデータを持っている:Pythonのパンダ、リサンプリングのみ特定の時間

Time        
2009-01-30 09:30:00 85.11 100.11 
2009-01-30 09:39:00 84.93 100.05 
2009-01-30 09:40:00 84.90 100.00 
2009-01-30 09:45:00 84.91 99.94 
2009-01-30 09:48:00 84.81 99.90 
2009-01-30 09:55:00 84.78 100.00 
2009-01-30 09:56:00 84.57 100.10 
2009-01-30 09:59:00 84.25 100.41 
2009-01-30 10:00:00 84.32 100.60 
2009-01-30 10:06:00 84.23 101.49 
2009-01-30 10:09:00 84.15 101.47 

私は午前9時30から16:00からのデータを使用してリサンプリングしますデータを78分間隔で(すなわち、9:30と16:00との間の時間を5等分する)。次のように私のコードでは、なります

Data= Data.between_time('9:30','16:00') 
tframe = '78T' 
hourlym = Data.resample(tframe, base=30).mean() 

出力:

Time          
2009-01-30 08:18:00 85.110000 100.110000 
2009-01-30 09:36:00 83.950645 101.984516 
2009-01-30 10:54:00 83.372294 103.093824 
2009-01-30 12:12:00 83.698624 102.566897 
2009-01-30 13:30:00 83.224397 103.076667 
2009-01-30 14:48:00 82.641167 104.114667 
2009-01-30 16:06:00  NaN   NaN 
2009-01-30 17:24:00  NaN   NaN 
2009-01-30 18:42:00  NaN   NaN 

私の基本パラメータを無視して、私の出力テーブルは、8:18から始まるあなたはパンダを見ることができるように、私はパンダがどのように求めているためであると考えています私の全体のデータを78分に正しく分割し、24時間を78分に等分することができないので、この奇妙な動作が起こります。パンダの1日目の午前9時半からのリサンプリングを強制的に開始することは可能ですか?または、リサンプリング中に特定の時間帯にのみ作業しますか?

+0

それはタイプミスだろうか? 72分ではなく 'tframe = '78T''とタイプしました。 – IanS

+0

残念ながら:(実際には78分が正しい番号なので、説明に間違いがあります。 –

答えて

4

引数が深夜に適用されるため、サンプリングは00:30から開始され、そこから78分増分が追加されます。私は2つの選択肢を見る。

オプション1

Data.resample(tframe, base=24) 

オプション2:真夜中に適用base(この場合24で)9時30分に到達するためにはどうあるべきか

図アウト

自分でdatetimeindexを生成し、reindexで再サンプリング:

index = pd.date_range('2009-01-30 09:30:00', '2009-01-30 16:00:00', freq='78min') 
Data.reindex(index=index) 

EDIT:複数の日のためにあなたがタイムスタンプを自分で生成する必要があります。ここで

index_date = pd.date_range('2016-04-01', '2016-04-04') 
index_date = pd.Series(index_date) 
index_time = pd.date_range('09:30:00', '16:00:00', freq='78min') 
index_time = pd.Series(index_time.time) 

index = index_date.apply(
    lambda d: index_time.apply(
     lambda t: datetime.combine(d, t) 
     ) 
    ).unstack().sort_values().reset_index(drop=True) 

は、コードが何をするかです:

  • は、あなたが興味を持っている日付と時刻を生成し、apply性を有するシリーズにそれらを作ります。
  • ネストされた「適用」を使用して、日付と時刻をループし、それらを日時オブジェクトに結合します。
  • 出力は正方形のデータフレーム(日付ごとに1列)なので、I unstackとタイムスタンプをソートします(最後にインデックスをリセットして途中で生成される無駄なインデックスを取り除きます)。

結果indexは、もともとオプション2のようにインデックスを再作成するために使用することができます。

Data.reindex(index=index) 
+0

24時間という2つのオプションの問題は、78分に等しく分割することができないため、私のデータは1日後にシフトを開始します(しかし、9:30から16:00のデータを78分のチャンクに分割することが可能です)。私のデータには毎日正確に5回のインデックスがあり、16:00と9:30以外の時間は無視されます。 –

+0

OK、複数日あります。 – IanS

+0

私の質問を編集しました。それは動作しますか? – IanS

関連する問題