簡體   English   中英

使用熊貓按特定順序選擇時間序列數據

[英]Selecting time-series data in a specific sequence using pandas

我正在嘗試根據觀測到的天氣數據創建新的季節性數據序列。

我想從此數據框中提取季節,然后創建一個新的數據框,該數據框具有按時間順序彼此依次排列的隨機季節序列,例如,隨機的春季,夏季的隨機,秋季的秋季,冬季的隨機。

我正在處理的CSV格式的時間序列數據可在此處獲得

到目前為止,我使用的代碼如下...

df = pd.read_csv("location of file")

#convert date column to datetime for querying
df['date'] = pd.to_datetime(df['date'], format= '%d-%b-%y')

#function which extracts seasons
def get_season(row):
if row['date'].month >= 3 and row['date'].month <= 5:
    return 'spring'
elif row['date'].month >= 6 and row['date'].month <= 8:
    return 'summer'
elif row['date'].month >= 9 and row['date'].month <= 11:
    return 'autumn'
else:
    return 'winter'

#apply the season function to the data frame
df['Season'] = df.apply(get_season, axis=1)

#Split into seasons
Sp = df.query('Season == "spring"')
#all the winters
W = df.query('Season == "winter"')
#all the summers
SU  = df.query('Season == "summer"')
#all the autumns
Au = df.query('Season == "autumn"')

這是我無法理解下一步要做什么的地方。

這樣做是將所有季節分開,但不是每個季節都分開(例如2006年冬季,2007年冬季等)。

我目前正在從每個季節中抽取隨機序列,如下所示:

#sampling a random 92 days from winter
rows = np.random.choice(Sp.index.values, 92)
sampled_df = Sp.ix[rows] 

但這不是我想要的,因為整個冬季要隨機抽幾天,我要從冬季取隨機的季節(十二月,一月,二月)。

為了讓我生成這個新序列,我將需要根據每年的每個季節,以便創建一個包含多個列的新數據框,這些列都以一個隨機的春天開始,之后是一個隨機的夏天,然后是一個隨機的秋天,然后是隨機的冬季,到未來數百年。

我不知道如何做到這一點。 請幫忙!

謝謝

我建議MultiIndex

df['Year'] = df['date'].dt.year
df2 = df.set_index(['Year', 'Season'], inplace=False)

現在,您有了一個按年份和季節編制索引的數據框,並且可以輕松地選擇給定年份的整個季節:

future = pd.DataFrame()
for i in range(5):
    for season in ['winter', 'spring', 'summer', 'autumn']:
        future = future.append(df2.loc[random.choice(range(2007, 2015))]
                                  .loc[season])

請注意,我將2015年排除在外是因為您的數據中沒有秋季或冬季-您可以自己解決這種情況。

另外,給定年份的冬季當前包括一月,二月和十二月。 您可能需要重新定義年份,以便將12月附加到下一年的冬季。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM