I have a DataFrame as follows:
data = [[np.nan,12,122],[np.nan,1230,1287],[123,101,812739],[1143,12301230,252],[234,342,4546],[2445,3453,3457],[7897,8657,5675], [46,5675,453],[76,484,3735], [363,93,4568], [385,568,367], [458,846,4847], [574,45747,658468], [57457,46534,4675]]
df1 = pd.DataFrame(data, index=['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04',
'2022-01-05', '2022-01-06', '2022-01-07', '2022-01-08',
'2022-01-09', '2022-01-10', '2022-01-11', '2022-01-12',
'2022-01-13', '2022-01-14'],
columns=['col_A', 'col_B', 'col_C'])
df1.index = pd.to_datetime(df1.index)
periodicity_dict = {'daily':'1D', 'weekly':'1W'}
df_columns = df1.columns
for key, value in periodicity_dict.items():
for col in df_columns:
df1[col+'_rolling_'+key]= np.nan
for i in df1[col].index[df1[col].index >= df1[col].first_valid_index()+pd.Timedelta(value)]:
df1[col+'_rolling_'+key].loc[i] = (df1[col].loc[i] - df1[col].loc[i-pd.Timedelta(value)])/df1[col].loc[i-pd.Timedelta(value)]
df1 = df1.filter(regex='rolling')
I'd like to get something of the following form:
col_A_rolling col_B_rolling col_C_rolling Type timeframe
quantile
0.01 -0.317000 -0.234 -0.0443 pct weekly
0.03 -0.314636 -0.022 ... pct weekly
0.05 ... ... ... ...
0.10 ... ...
0.01 ... ...
0.03 ... ...
0.05 ... ...
0.10 -0.306364 -.530023 pct daily
(NOTE: the numbers in this DataFrame are hypothetical)
How can this be done using .stack()
and .strp()
functions? If possible.