从多个多索引数据框架创建新的数据框架

时间:2016-05-02 13:14:13

标签: python pandas dataframe

我想创建一个x年数的新数据框,该数据框采用之前天气数据的随机季节。

用于说明问题的代码:

functools

将季节功能应用于日期时间索引

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数据框中随机出现一个冬天,然后是来自winters的随机弹簧,然后是来自{{的随机夏天1}}和来自springs的随机秋天并且在指定的年数(例如100)中执行此操作,但我看不到如何执行此操作。

编辑:

允许重复的季节(它应该随机抽样季节),并且第一个春天不必与第一个冬天属于同一年,这无关紧要。

编辑2:使用所有季节性数据框的解决方案:

summers

1 个答案:

答案 0 :(得分: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)