日付(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時間ごとに毎日1年間継続します。
私の目的は何ですか?
NetLWに基づいて特定の日数のデータを抽出し、その日の11時間と23時間のみを抽出したいと思います。しかし、その時間の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])
そして、dates_listを1つのシリーズ/データフレームに連結して日付を取得できます
エラーメッセージ KeyError:True
上記の例外の処理中に、別の例外が発生しました
そしてそれはこの線を指しています:
---> days_list.append(df3 [df3.loc [idx、 'NetLW'] <-30.0])
ブールdtypeを使用して、それをdf3のインデックスとして使用し、データを抽出することを期待しています。
また、複数のループを作成する代わりに、興味のある時間をグループ化できる場合は、Pandasを初めて使用するのでお知らせください。
データフレームでのブールインデックス付けでは、通常、.loc
インデクサーを使用する必要があります。しかし、ここで起こっていることは、ループしているときにインデックスが1つしかないということです。自由に翻訳:df3_clear = df3[True or False]
。インデックスにTrue
。という行がないのではないかと思います。どちらでもないFalse
。
あなたが探しているものは次の線に沿っているようです(おそらくワンライナーかもしれませんが、私は少し怠惰です):
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))]
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加