2017-12-06 1 views
0

私は、日付(datetime.datetime)に関して再インデックス付けしたデータセットを持っています。データフレームの小さなサンプルは次のようになります。df2:パンダは、平均と選択的な時間インデックスをインデックスに入れます。

       lat   lon  Press NetLW 
rounded_dt 1997-11-30 17:00:00 76.15387 -147.62606 998.8 -51.0 
      1997-11-30 18:00:00 76.15280 -147.60379 1000.0 -50.9 
      1997-11-30 19:00:00 76.15164 -147.58055 1001.1 -54.4 
      1997-11-30 20:00:00 76.15037 -147.56047 1002.6 -52.2 
      1997-11-30 21:00:00 76.14948 -147.54034 1004.2 -51.9 
      1997-11-30 22:00:00 76.14834 -147.52181 1005.5 -51.3 
      1997-11-30 23:00:00 76.14777 -147.50568 1006.5 -50.7 
      1997-12-01 06:00:00 76.14152 -147.42073 1013.3 -44.6 
      1997-12-01 07:00:00 76.14105 -147.41370 1013.8 -45.4 
      1997-12-01 08:00:00 76.14072 -147.40661 1014.5 -46.1 
      1997-12-01 09:00:00 76.14059 -147.40093 1015.0 -43.0 

したがって、時系列は毎時1年ごとに続きます。

私の目標は何ですか?

Iは日の特定の範囲についてのみそれらの日の11時間及び23時間NetLWに基づいてデータを抽出したいです。しかし、その時のNetLWは、11時間はNetLW(10時間)、NetLW(11時間)、NetLW(12時間)で平均化されるべきだとします。

私がこれまで行ってきたことは?

df3 = df2.rolling(window=3, center=True).mean() # to get the rolling mean 
# I want to extract the dates of interest from df3 
dates_list =[] 
for idx in df2.index: 
    # Winter dates (Dec-March) 
    if idx > datetime.datetime(1997, 11, 30, 23) and idx < datetime.datetime(1998, 3, 1, 0): 
     if idx.hour ==11 or idx.hour == 23: 
      dates_list.append(df3[df3.loc[idx, 'NetLW'] < -30.0])  

そして、私は1シリーズ/データフレームでdates_listを連結し、日付

得ることができる

エラーメッセージ KeyError例外:上記の例外の取り扱い中

真、別の例外が発生しました

そして、それは、この行を指す:私が使用することを期待してい

---> dates_list.append(DF3 [df3.loc [IDX、 'NetLW'] < -30.0])

boolean dtypeをdf3のインデックスとして使用し、データを抽出します。

また、複数のループを書くのではなく、私が興味を持っている時間をグループ化することができれば、私がパンダの新人として知らせてください。

答えて

1

データフレーム内のブールインデックスは、通常、.locインデクサを使用する必要があります。しかし、ここで起こっていることは、あなたがループしているときにただ一つのインデックスがあるということです。自由に翻訳された:df3_clear = df3[True or False]Trueというあなたの索引には行がありません。どちらもFalse。あなたが探しているものを

の線に沿ってのようです(おそらくonelinerすることができますが、私は怠け者少しです):私が間違ってやって説明するための

df3_clear = df3['1997-11-30 23:00':'1998-03-01'].query('NetLW < -30') 
df3_clear = df3_clear.iloc[np.where((df3_clear.index.hour == 23) | (df3_clear.index.hour == 11))] 
+0

感謝を。しかし、2行目で私にこのエラーが返されます: ValueError:複数の要素を持つ配列の真理値があいまいです。 a.any()またはa.all() –

+0

ああを使用してください。 Erm ..それはかなり自由に書かれましたが、それは理にかなっています。私は少しあなたに戻ってきます – Uvar

+1

@ Light_B私は比較の要素を作ることを忘れていました。 – Uvar

関連する問題