首页 > 解决方案 > Pandas 使用 for 循环创建额外的数据帧

问题描述

出于 SO 目的,这是一些组成的时间序列数据:

import pandas as pd 
import numpy as np 
from numpy.random import randint 

np.random.seed(10)  # added for reproductibility                                                                                                                                                                 

rng = pd.date_range('10/9/2018 00:00', periods=1000, freq='1H') 
df = pd.DataFrame({'Random_Number':randint(1, 100, 1000)}, index=rng) 

问题,我如何创建一个函数,该函数可以在 pandas 数据框中为每天返回重新采样的 97.5 和 2.5 个百分位数值?我知道下面的这段代码甚至没有关闭它只会返回整个数据集的上下百分位数。最终,我试图每天分解它,返回索引的数据框将是重新采样当天的时间戳(日期)。

def createDfs(data):
    for day in df:
        dfDay = pd.DataFrame()

        hi = df.quantile(0.975)[0]
        low = df.quantile(0.025)[0]

        data = {'upper_97.5%': [hi],
                'lower_2.5%' : [low]}     

        dfUpperLower = pd.DataFrame(data)
        #dfUpperLower.set_index('Date')

    return dfUpperLower

任何提示都非常感谢..

标签: pythonpandasdata-science

解决方案


我认为您只想使用.resamplewith .quantile

In [10]: df.resample('1D').quantile([0.025, 0.975]).unstack()
Out[10]:
           Random_Number
                   0.025   0.975
2018-10-09         5.600  91.700
2018-10-10        12.575  94.425
2018-10-11         5.575  92.400
2018-10-12         9.875  97.425
2018-10-13         2.725  87.550
2018-10-14        10.200  96.425
2018-10-15        10.725  96.425
...

推荐阅读