x年前の天気データからランダムなシーズンを取った新しいデータフレームを作成します。複数のマルチインデックスデータフレームから新しいデータフレームを作成
問題を説明するためのコード:
import pandas as pd
import numpy as np
dates = pd.date_range('20070101',periods=3200)
df = pd.DataFrame(data=np.random.randint(0,100,(3200,1)), columns =list('A'))
df['date'] = dates
df = df[['date','A']]
日時指数にシーズン関数を適用
def get_season(row):
if row['date'].month >= 3 and row['date'].month <= 5:
return '2'
elif row['date'].month >= 6 and row['date'].month <= 8:
return '3'
elif row['date'].month >= 9 and row['date'].month <= 11:
return '4'
else:
return '1'
は
df['Season'] = df.apply(get_season, axis=1)
関数を適用インデックス
のための '年' の列を作成します。 私は今winters
からランダム冬を取る新しい
DataFrame
を作成したい
winters = df.query('Season == "1"')
springs = df.query('Season == "2"')
summers = df.query('Season == "3"')
autumns = df.query('Season == "4"')
から
年によるマルチインデックスとシーズンは
df = df.set_index(['Year', 'Season'], inplace=False)
選択するために、シーズンに基づいて新しいデータフレームを作成します。データフレームに続いてsprings
のランダムな春が続き、summers
からランダムな夏があり、ランダムな秋はautumns
からランダムな夏が続き、これは指定された年数(例: 100)しかし、私はこれを行う方法を見ることができません。
EDIT:
重複季節は(それがランダムに季節をサンプリングしなければならない)が許可されており、第一バネは最初の冬と同じ年に属している必要はありません、これは問題ではありません。
EDIT 2:ソリューションのすべての季節のデータフレームを使用して:
years = df['date'].dt.year.unique()
dfs = []
for i in range(outputyears):
dfs.append(winters.query("Year == %d" %np.random.choice(years, 1)))
dfs.append(springs.query("Year == %d" %np.random.choice(years, 1)))
dfs.append(summers.query("Year == %d" %np.random.choice(years, 1)))
dfs.append(autumns.query("Year == %d" %np.random.choice(years, 1)))
rnd = pd.concat(dfs)
それははっきりしていません - 重複は許可されていますか?最初の春は最初の冬と同じ年に属するべきですか? – MaxU
申し訳ありません - 重複は許可されています(季節をランダムにサンプリングする必要があります)。いいえ - 最初の春は最初の冬と同じ年に属してはいけません。 – Pad