从多个多索引数据帧创建新的数据帧

2024-04-27 04:32:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个新的数据帧,它从以前的天气数据中随机抽取季节。在

说明问题的代码:

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']]

将季节函数应用于日期时间索引

^{pr2}$

应用函数

^{3}$

为索引创建“年份”列

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数据帧中随机抽取一个冬天,接着从springs中随机抽取一个春天,然后从{}中随机抽取一个夏天,从{}随机抽取秋天,并在指定的年份内(例如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)

Tags: 数据dfdatenprandomqueryyearseason
1条回答
网友
1楼 · 发布于 2024-04-27 04:32:35

这可能不是最好的方法,但你可以这样做:

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)

相关问题 更多 >