【发布时间】:2016-05-02 22:41:59
【问题描述】:
我想创建一个具有 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)
为索引创建一个“年份”列
df['Year'] = df['date'].dt.year
按年份和季节的多索引
df = df.set_index(['Year', 'Season'], inplace=False)
根据季节创建新的数据框以供选择
winters = df.query('Season == "1"')
springs = df.query('Season == "2"')
summers = df.query('Season == "3"')
autumns = df.query('Season == "4"')
我现在想创建一个新的DataFrame,它从wintersdataframe 获取随机的冬天,然后从springs 获取随机的春天,然后从summers 获取随机的夏天,从@ 获取随机的秋天987654331@ 并在指定的年数(例如 100 年)内执行此操作,但我不知道如何执行此操作。
编辑:
允许重复的季节(它应该随机采样季节),第一个春天不必和第一个冬天属于同一年,这没关系。
编辑 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)
【问题讨论】:
-
不清楚 - 是否允许重复?第一个春天应该和第一个冬天属于同一年吗?
-
道歉 - 允许重复(它应该随机采样季节),不 - 第一个春天不应该与第一个冬天属于同一年,这没关系。