Suppose I have the following:
a data frame with multi-index columns
a dictionary that's been created from the data frame with multi-index columns in order to efficiently manipulate it.
df = pd.DataFrame([ [100,90,80,70,36,45], [101,78,65,88,55,78], [92,77,42,79,43,32], [103,98,76,54,45,65]], index = pd.date_range(start='2022-01-01', periods=4) ) df.columns = pd.MultiIndex.from_tuples( (("mkf", "Open"), ("mkf", "Close"), ("tdf", "Open"), ("tdf","Close"), ("ghi","Open"), ("ghi", "Close")) ) df mkf tdf ghi Open Close Open Close Open Close 2022-01-01 100 90 80 70 36 45 2022-01-02 101 78 65 88 55 78 2022-01-03 92 77 42 79 43 32 2022-01-04 103 98 76 54 45 65 df_dict = {c:df[c].assign(r=np.log(df[(c, 'Close')]).diff()) for c in df.columns.levels[0]} df_dict {'ghi': Open Close r 2022-01-01 36 45 NaN 2022-01-02 55 78 0.550046 2022-01-03 43 32 -0.890973 2022-01-04 45 65 0.708651, 'mkf': Open Close r 2022-01-01 100 90 NaN 2022-01-02 101 78 -0.143101 2022-01-03 92 77 -0.012903 2022-01-04 103 98 0.241162, 'tdf': Open Close r 2022-01-01 80 70 NaN 2022-01-02 65 88 0.228842 2022-01-03 42 79 -0.107889 2022-01-04 76 54 -0.380464}
What is the best way to transform the dictionary back to a data frame in its original form (i.e. with multi-index columns)?
mkf tdf ghi
Open Close r Open Close r Open Close r
2022-01-01 100 90 NaN 80 70 NaN 36 45 NaN
2022-01-02 101 78 0.55 65 88 -0.14 55 78 0.23
2022-01-03 92 77 -0.89 42 79 -0.12 43 32 -0.10
2022-01-04 103 98 0.71 76 54 0.24 45 65 -0.38