私は季節データを含むマルチインデックスデータフレームからリサンプリングしています。無作為の夏にランダムな春が続いてランダムな冬を再サンプリングしたいのですが、私が選択するシーズンを指定していますが、ランダムなシーズンに続いてランダムなシーズンをサンプリングする方法しかありません。に必要なことは、いくつかの季節を欠けているように、季節的なシーケンスを尊重しながらデータフレームからのサンプル
import pandas as pd
import numpy as np
dates = pd.date_range('20100101',periods=1825)
df = pd.DataFrame(data=np.random.randint(0,100,(1825,2)), columns =list('AB'))
df['date'] = dates
df = df[['date','A', 'B']]
#season function
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'
#apply the season function to dataframe
df['Season'] = df.apply(get_season, axis=1)
#Year column for multi-index
df['Year'] = df['date'].dt.year
#season column for multi-index
df = df.set_index(['Year', 'Season'], inplace=False)
再インデックスを(:
をリサンプリングするから、マルチインデックスデータフレームを取る:私は、コードを説明するためにですので、ここで間違ったつもりだどこで見ることができません
years = df['date'].dt.year.unique()
サンプル:から範囲を選択するには)私が欲しいもの
newindex = [(2010L, '1'), (2011L, '1'), (2011L, '3'), (2012L, '4'), (2013L, '2'), (2015L, '3')]
df = df.loc[newindex]
#recreate season and year
df['Season'] = df.apply(get_season, axis=1)
df['Year'] = df['date'].dt.year
年変数を行いますこれは、データフレームおよびサンプルの季節がランダムに、しかし、私はそれがの順序を尊重し、ランダムにしてないことを選択しているように見えるSeason == '1'
Season == '2'
Season == '3'
Season =='4'
から選択することを選択したにも関わらず、出力
dfs = []
for i in range(100):
dfs.append(df.query("Year == %d and Season == '1'" %np.random.choice(years, 1)))
dfs.append(df.query("Year == %d and Season == '2'" %np.random.choice(years, 1)))
dfs.append(df.query("Year == %d and Season == '3'" %np.random.choice(years, 1)))
dfs.append(df.query("Year == %d and Season == '4'" %np.random.choice(years, 1)))
rnd = pd.concat(dfs)
:データフレームから冬、春、夏、秋(1,2,3,4)。私はreplace == True
を追加しようとしましたが、これは効果がありません。
これを調整してランダムな冬を選択し、次にランダムな春、ランダムな夏、次にランダムな秋を選択するにはどうすればよいですか?
おかげ
EDIT 1:
それが唯一のシーズンを選択していない年ができますので、コードを変更する - 私は1つだけを選択する指定てるにもかかわらず(それは、今以上の冬を選択)
dfs = []
for i in range(100):
dfs.append(df.query("Season == '1'" %np.random.choice(years, 1)))
dfs.append(df.query("Season == '2'" %np.random.choice(years, 1)))
dfs.append(df.query("Season == '3'" %np.random.choice(years, 1)))
dfs.append(df.query("Season == '4'" %np.random.choice(years, 1)))
rnd = pd.concat(dfs)
以下の説明は、問題は、さまざまなデータフレームからのサンプリング、「異常な」季節の組み込みなど、より広範な問題に対する解決策を実際に探していることを示唆しています。より良い質問をし、役に立つ助言を得る方法をここで見てください:http://stackoverflow.com/help/how-to-ask – Stefan