Search code examples
pythonpandasmulti-index

pd.MultiIndex: How do I add 1 more level (0) to a multi-index column?


This sounds trivial, but I just can't add 1 more level of index to the columns of a multi-level column df.

Current State


Category | Cat1       | Cat2 |
         |Total Assets| AUMs |
Firm 1   | 100        | 300  |
Firm 2   | 200        | 3400 |
Firm 3   | 300        | 800  |
Firm 4   | NaN        | 800  |

Desired State

Importance | H        | H    |
Category | Cat1       | Cat2 |
         |Total Assets| AUMs |
Firm 1   | 100        | 300  |
Firm 2   | 200        | 3400 |
Firm 3   | 300        | 800  |
Firm 4   | NaN        | 800  |

When I use the below code

Code 1: Error: isnull is not defined for MultiIndex

df.columns=pd.MultiIndex.from_arrays([['H','H'],df.columns])  

Code 2: Error 1st level Name become a combination

df.columns=pd.MultiIndex.from_arrays([['H','H'],df.columns.value])

Importance | H                          | H            |
Category   | (Cat1, Total Assets)       | (Cat2, AUMs) |

Firm 1   | 100        | 300  |
Firm 2   | 200        | 3400 |
Firm 3   | 300        | 800  |
Firm 4   | NaN        | 800  |

Solution

  • Use concat():

    df=pd.concat([df],keys=['H'],names=['Importance'],axis=1)