【问题标题】:Create new dataframe from multiple multi-index dataframes从多个多索引数据帧创建新数据帧
【发布时间】: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)

【问题讨论】:

  • 不清楚 - 是否允许重复?第一个春天应该和第一个冬天属于同一年吗?
  • 道歉 - 允许重复(它应该随机采样季节),不 - 第一个春天不应该与第一个冬天属于同一年,这没关系。

标签: python pandas dataframe


【解决方案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)

【讨论】:

  • 这对于这个简化版本的问题确实有效(谢谢!) - 但它不会从四个单独的季节性数据框中选择季节,这是我想要做的......
  • 啊 - 我只需要将 df.query 更改为 winters.query 等。谢谢!
  • 我一直在尝试将此方法应用于缺少某些季节的数据框(我需要这样做)并且我遇到了一些错误(此处概述:stackoverflow.com/questions/37140439/…)你可能是有时间可以帮忙!
猜你喜欢
  • 1970-01-01
  • 2022-08-12
  • 2020-10-16
  • 1970-01-01
  • 2019-08-11
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 2020-09-18
相关资源
最近更新 更多