0

For SO purposes, this is some made up times series data:

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) 

Question, how do I create a function that can return re-sampled daily 97.5 & 2.5 percentiles values for each in day in pandas data frame? I know this code below isn't even close it will just return the upper & lower percentiles of the entire dataset. Ultimately Im trying to break this down per day and the dataframe returned the index would be the time stamp (date) of the day re sampled..

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

Any tips greatly appreciated..

1 Answer 1

2

I think you just want to use .resample with .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
...
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.