2016-05-02 9 views
0

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) 
+0

それははっきりしていません - 重複は許可されていますか?最初の春は最初の冬と同じ年に属するべきですか? – MaxU

+0

申し訳ありません - 重複は許可されています(季節をランダムにサンプリングする必要があります)。いいえ - 最初の春は最初の冬と同じ年に属してはいけません。 – Pad

答えて

1

それはおそらくそれを行うための最善の方法はありませんが、あなたは、このようにそれを行うことができます。

years = df['date'].dt.year.unique() 

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) 
+0

これは問題の単純化されたバージョンのために働く(ありがとう!) - しかし、それは私がしたいことである4つの別々の季節のデータフレームから季節を選択しません... – Pad

+0

ああ - 私はdf冬にquery。queryなどありがとう! – Pad

+0

私はいくつかの季節が不足していたデータフレームにこのメソッドを適用しようとしていましたが、いくつかのエラーが発生しました(http://stackoverflow.com/questions/37140439/sample-季節順のデータフレームから)、時間があれば助けてくれるかもしれません! – Pad

関連する問題